System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ea3ebd353db0a110c9c340eda4db86ac74149344:


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 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4770: 74 75 72 6e 20 53 51 4c 69 74 65 53 74 72 69 6e  turn SQLiteStrin
4780: 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38  g.StringFromUtf8
4790: 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 20 47  IntPtr(pValue, G
47a0: 65 74 42 79 74 65 73 28 29 29 3b 0d 0a 20 20 20  etBytes());..   
47b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
47c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
47d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4810: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
4820: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4830: 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73  Gets and returns
4840: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
4850: 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61  Byte" /> array a
4860: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
4870: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
4880: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
4890: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
48a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
48b0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
48c0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
48d0: 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61  f="Byte" /> arra
48e0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
48f0: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20  h this value... 
4900: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
4910: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
4920: 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74  ublic byte[] Get
4930: 42 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20  Blob()..        
4940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
4950: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
4960: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
4970: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
4980: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
4990: 65 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74  eBytes.FromIntPt
49a0: 72 28 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74  r(pValue, GetByt
49b0: 65 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  es());..        
49c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4a20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4a30: 20 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20         /// Uses 
4a40: 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65  the native value
4a50: 20 68 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69   handle to obtai
4a60: 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  n and store the 
4a70: 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20  managed value.. 
4a80: 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74         /// for t
4a90: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
4aa0: 6e 63 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67  nce, thus saving
4ab0: 20 69 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73   it for later us
4ac0: 65 2e 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20  e.  The type..  
4ad0: 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65        /// of the
4ae0: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69   managed value i
4af0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
4b00: 74 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74  the type affinit
4b10: 79 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  y of the..      
4b20: 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c    /// native val
4b30: 75 65 2e 20 20 49 66 20 74 68 65 20 74 79 70 65  ue.  If the type
4b40: 20 61 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74   affinity is not
4b50: 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74   recognized by t
4b60: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
4b70: 20 6d 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b   method, no work
4b80: 20 69 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c   is done and fal
4b90: 73 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d  se is returned..
4ba0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
4bb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
4bc0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
4bd0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
4be0: 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69  zero if the nati
4bf0: 76 65 20 76 61 6c 75 65 20 77 61 73 20 70 65 72  ve value was per
4c00: 73 69 73 74 65 64 20 73 75 63 63 65 73 73 66 75  sisted successfu
4c10: 6c 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lly...        //
4c20: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4c30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
4c40: 6c 20 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20  l Persist()..   
4c50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4c60: 20 20 20 20 73 77 69 74 63 68 20 28 47 65 74 54      switch (GetT
4c70: 79 70 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a  ypeAffinity())..
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
4ca0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
4cb0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d  .Uninitialized:.
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 76 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  value = null;.. 
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d10: 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61         PreventNa
4d20: 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20  tiveAccess();.. 
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70         return (p
4d50: 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29  ersisted = true)
4d60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4d70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4d80: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
4d90: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
4da0: 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4:..            
4db0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dd0: 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e     value = GetIn
4de0: 74 36 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  t64();..        
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63  PreventNativeAcc
4e10: 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ess();..        
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e30: 72 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65  return (persiste
4e40: 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  d = true);..    
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4e70: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
4e80: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
4ec0: 75 65 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29  ue = GetDouble()
4ed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4ee0: 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65             Preve
4ef0: 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29  ntNativeAccess()
4f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4f10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4f20: 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74  n (persisted = t
4f30: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
4f40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
4f60: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
4f70: 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  Text:..         
4f80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fa0: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65        value = Ge
4fb0: 74 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  tString();..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
4fe0: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
5010: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5040: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
5050: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5070: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
5090: 61 6c 75 65 20 3d 20 47 65 74 42 79 74 65 73 28  alue = GetBytes(
50a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76              Prev
50c0: 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28  entNativeAccess(
50d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
50f0: 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20  rn (persisted = 
5100: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
5110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5130: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
5140: 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20  .Null:..        
5150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5170: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44         value = D
5180: 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20  BNull.Value;..  
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
51b0: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
51e0: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5200: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5210: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
5220: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
5230: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5250: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
5260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5270: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5280: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
5290: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
52a0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
52b0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
52c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5310: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
5320: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
5330: 69 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f  intOp Enumeratio
5340: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  n..    /// <summ
5350: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
5360: 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f  ese are the allo
5370: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
5380: 68 65 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61  he operators tha
5390: 74 20 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d  t are part of a.
53a0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61  .    /// constra
53b0: 69 6e 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20  int term in the 
53c0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
53d0: 61 20 71 75 65 72 79 20 74 68 61 74 20 75 73 65  a query that use
53e0: 73 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  s a virtual..   
53f0: 20 2f 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20   /// table...   
5400: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5410: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
5420: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
5430: 74 72 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d  traintOp : byte.
5440: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5450: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5460: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
5470: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
5480: 20 74 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70   the equality op
5490: 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
54a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
54b0: 0a 20 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f  .        EqualTo
54c0: 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20   = 2,....       
54d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
54e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
54f0: 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
5500: 73 20 74 68 65 20 67 72 65 61 74 65 72 20 74 68  s the greater th
5510: 61 6e 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  an operator...  
5520: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5530: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72  ary>..        Gr
5540: 65 61 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a  eaterThan = 4,..
5550: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
5560: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5570: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
5580: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
5590: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
55a0: 6c 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a  l to operator...
55b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
55c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
55d0: 4c 65 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54  LessThanOrEqualT
55e0: 6f 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20  o = 8,....      
55f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5600: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
5610: 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  s value represen
5620: 74 73 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e  ts the less than
5630: 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   operator...    
5640: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5650: 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73  y>..        Less
5660: 54 68 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20  Than = 16,....  
5670: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5680: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
5690: 20 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72   This value repr
56a0: 65 73 65 6e 74 73 20 74 68 65 20 67 72 65 61 74  esents the great
56b0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
56c0: 20 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20   to operator... 
56d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
56e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47  mary>..        G
56f0: 72 65 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61  reaterThanOrEqua
5700: 6c 54 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20  lTo = 32,....   
5710: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
5720: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
5730: 54 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65  This value repre
5740: 73 65 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20  sents the MATCH 
5750: 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20  operator...     
5760: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5770: 3e 0d 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68  >..        Match
5780: 20 3d 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20   = 64..    }..  
5790: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
57a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
57b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
57f0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
5800: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
5810: 61 69 6e 74 20 48 65 6c 70 65 72 20 43 6c 61 73  aint Helper Clas
5820: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
5830: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
5840: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
5850: 6e 74 73 20 74 68 65 20 6e 61 74 69 76 65 20 73  nts the native s
5860: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
5870: 73 74 72 61 69 6e 74 20 73 74 72 75 63 74 75 72  straint structur
5880: 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20  e..    /// from 
5890: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
58a0: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  library...    //
58b0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
58c0: 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20    public sealed 
58d0: 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65  class SQLiteInde
58e0: 78 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20  xConstraint..   
58f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
5900: 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e  ion Internal Con
5910: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
5920: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5930: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
5940: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
5950: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
5960: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
5970: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
5980: 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
5990: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
59a0: 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  int structure...
59b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
59c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
59d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
59e0: 22 63 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20  "constraint">.. 
59f0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
5a00: 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e  ative sqlite3_in
5a10: 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73  dex_constraint s
5a20: 74 72 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e  tructure to use.
5a30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5a40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5a50: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
5a60: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d  ndexConstraint(.
5a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
5a80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5a90: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
5aa0: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72  onstraint constr
5ab0: 61 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  aint..          
5ac0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5ad0: 20 3a 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69   : this(constrai
5ae0: 6e 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73  nt.iColumn, cons
5af0: 74 72 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74  traint.op, const
5b00: 72 61 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20  raint.usable,.. 
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b20: 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65    constraint.iTe
5b30: 72 6d 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20  rmOffset)..     
5b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5b50: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
5b60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5b70: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5b80: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5be0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
5bf0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
5c00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5c10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
5c20: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
5c30: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
5c40: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
5c50: 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20  cified field..  
5c60: 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73        /// values
5c70: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5c80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5c90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5ca0: 6d 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20  me="iColumn">.. 
5cb0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d         /// Colum
5cc0: 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73  n on left-hand s
5cd0: 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e  ide of constrain
5ce0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
5cf0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
5d00: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5d10: 65 3d 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20 20  e="op">..       
5d20: 20 2f 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20   /// Constraint 
5d30: 6f 70 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63  operator (<see c
5d40: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
5d50: 43 6f 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e  ConstraintOp" />
5d60: 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  )...        /// 
5d70: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
5d80: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5d90: 65 3d 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20 20  e="usable">..   
5da0: 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66       /// True if
5db0: 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
5dc0: 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20   is usable...   
5dd0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
5de0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
5df0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65 72  param name="iTer
5e00: 6d 4f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20  mOffset">..     
5e10: 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65     /// Used inte
5e20: 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72  rnally - <see cr
5e30: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
5e40: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
5e50: 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  ex" />..        
5e60: 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72  /// should ignor
5e70: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
5e80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
5e90: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
5ea0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28  IndexConstraint(
5eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
5ec0: 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20  t iColumn,..    
5ed0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e          SQLiteIn
5ee0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20  dexConstraintOp 
5ef0: 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op,..           
5f00: 20 62 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a 20   byte usable,.. 
5f10: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
5f20: 54 65 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20 20  TermOffset..    
5f30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5f40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5f50: 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d    this.iColumn =
5f60: 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20   iColumn;..     
5f70: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 70 20 3d         this.op =
5f80: 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   op;..          
5f90: 20 20 74 68 69 73 2e 75 73 61 62 6c 65 20 3d 20    this.usable = 
5fa0: 75 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20  usable;..       
5fb0: 20 20 20 20 20 74 68 69 73 2e 69 54 65 72 6d 4f       this.iTermO
5fc0: 66 66 73 65 74 20 3d 20 69 54 65 72 6d 4f 66 66  ffset = iTermOff
5fd0: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  set;..        }.
5fe0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
5ff0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6050: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
6060: 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20  Fields..        
6070: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6080: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d         /// Colum
6090: 6e 20 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73  n on left-hand s
60a0: 69 64 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e  ide of constrain
60b0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
60c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
60d0: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69      public int i
60e0: 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Column;....     
60f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6140: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6150: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6160: 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61  Constraint opera
6170: 74 6f 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22  tor (<see cref="
6180: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
6190: 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20  raintOp" />)... 
61a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
61b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
61c0: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
61d0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70  xConstraintOp op
61e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
6240: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6250: 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69        /// True i
6260: 66 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  f this constrain
6270: 74 20 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20  t is usable...  
6280: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6290: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
62a0: 62 6c 69 63 20 62 79 74 65 20 75 73 61 62 6c 65  blic byte usable
62b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
6310: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6320: 20 20 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69        /// Used i
6330: 6e 74 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65  nternally - <see
6340: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
6350: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
6360: 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20  Index" />..     
6370: 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67     /// should ig
6380: 6e 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nore...        /
6390: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
63a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
63b0: 74 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a  t iTermOffset;..
63c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
63d0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
63e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
63f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6440: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
6450: 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 20 48  teIndexOrderBy H
6460: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
6470: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6480: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
6490: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ss represents th
64a0: 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
64b0: 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73  _index_orderby s
64c0: 74 72 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a 20  tructure from.. 
64d0: 20 20 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74     /// the SQLit
64e0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
64f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6500: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
6510: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
6520: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 0d  iteIndexOrderBy.
6530: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6540: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
6550: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
6560: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
6570: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
6580: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
6590: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
65a0: 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
65b0: 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76   specified nativ
65c0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  e..        /// s
65d0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64  qlite3_index_ord
65e0: 65 72 62 79 20 73 74 72 75 63 74 75 72 65 2e 0d  erby structure..
65f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
6600: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6610: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6620: 3d 22 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20  ="orderBy">..   
6630: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
6640: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
6650: 78 5f 6f 72 64 65 72 62 79 20 73 74 72 75 63 74  x_orderby struct
6660: 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20  ure to use...   
6670: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
6680: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
6690: 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  nal SQLiteIndexO
66a0: 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20  rderBy(..       
66b0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
66c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
66d0: 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
66e0: 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20  rderBy..        
66f0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
6700: 20 20 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42     : this(orderB
6710: 79 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72  y.iColumn, order
6720: 42 79 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20  By.desc)..      
6730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6740: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
6750: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6760: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6770: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
67d0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
67e0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
67f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6800: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
6810: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
6820: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
6830: 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
6840: 69 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20  ified field..   
6850: 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e       /// values.
6860: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6870: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6880: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6890: 65 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20  e="iColumn">..  
68a0: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
68b0: 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   number...      
68c0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
68d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
68e0: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e 0d  am name="desc">.
68f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75  .        /// Tru
6900: 65 20 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c  e for DESC.  Fal
6910: 73 65 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20  se for ASC...   
6920: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
6930: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
6940: 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  te SQLiteIndexOr
6950: 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20  derBy(..        
6960: 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c      int iColumn,
6970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
6980: 74 65 20 64 65 73 63 0d 0a 20 20 20 20 20 20 20  te desc..       
6990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
69a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
69b0: 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43  his.iColumn = iC
69c0: 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20  olumn;..        
69d0: 20 20 20 20 74 68 69 73 2e 64 65 73 63 20 3d 20      this.desc = 
69e0: 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 7d  desc;..        }
69f0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
6a00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6a60: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
6a70: 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20   Fields..       
6a80: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6a90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75          /// Colu
6aa0: 6d 6e 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20  mn number...    
6ab0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6ac0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
6ad0: 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d  ic int iColumn;.
6ae0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
6b40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6b50: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72      /// True for
6b60: 20 44 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f   DESC.  False fo
6b70: 72 20 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20  r ASC...        
6b80: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6b90: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
6ba0: 79 74 65 20 64 65 73 63 3b 0d 0a 20 20 20 20 20  yte desc;..     
6bb0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
6bc0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
6bd0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
6c30: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64  region SQLiteInd
6c40: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
6c50: 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  e Helper Class..
6c60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6c70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
6c80: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
6c90: 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   the native sqli
6ca0: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
6cb0: 61 69 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20 20  aint_usage..    
6cc0: 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 20 66 72  /// structure fr
6cd0: 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  om the SQLite co
6ce0: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
6cf0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6d00: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
6d10: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49  ed class SQLiteI
6d20: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
6d30: 61 67 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  age..    {..    
6d40: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
6d50: 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72  rnal Constructor
6d60: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
6d70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6d80: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
6d90: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
6da0: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
6db0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
6dc0: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
6dd0: 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  // sqlite3_index
6de0: 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67  _constraint_usag
6df0: 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  e structure...  
6e00: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6e10: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
6e20: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
6e30: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 3e  onstraintUsage">
6e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
6e50: 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
6e60: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
6e70: 74 5f 75 73 61 67 65 20 73 74 72 75 63 74 75 72  t_usage structur
6e80: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
6e90: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6ea0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
6eb0: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  l SQLiteIndexCon
6ec0: 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20  straintUsage(.. 
6ed0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
6ee0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6ef0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
6f00: 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f  straint_usage co
6f10: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20  nstraintUsage.. 
6f20: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6f30: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
6f40: 28 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  (constraintUsage
6f50: 2e 61 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73  .argvIndex, cons
6f60: 74 72 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74  traintUsage.omit
6f70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6f80: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
6f90: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
6fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
6fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7010: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
7020: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
7030: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
7040: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
7050: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
7060: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7070: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
7080: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
7090: 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ield..        //
70a0: 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20  / values...     
70b0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
70c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
70d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76  param name="argv
70e0: 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20  Index">..       
70f0: 20 2f 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20   /// If greater 
7100: 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69  than 0, constrai
7110: 6e 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 72  nt is part of ar
7120: 67 76 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a  gv to xFilter...
7130: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
7140: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
7150: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
7160: 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mit">..        /
7170: 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61  // Do not code a
7180: 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63   test for this c
7190: 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20  onstraint...    
71a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
71b0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
71c0: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  e SQLiteIndexCon
71d0: 73 74 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20  straintUsage(.. 
71e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61             int a
71f0: 72 67 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20  rgvIndex,..     
7200: 20 20 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74         byte omit
7210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
7220: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7230: 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 67          this.arg
7240: 76 49 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64  vIndex = argvInd
7250: 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex;..           
7260: 20 74 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69   this.omit = omi
7270: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
7280: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7290: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
72f0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
7300: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  ields..        /
7310: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7320: 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 67 72 65        /// If gre
7330: 61 74 65 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e  ater than 0, con
7340: 73 74 72 61 69 6e 74 20 69 73 20 70 61 72 74 20  straint is part 
7350: 6f 66 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74  of argv to xFilt
7360: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  er...        ///
7370: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7380: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
7390: 61 72 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20 20  argvIndex;....  
73a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
73f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
7400: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7410: 2f 2f 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20  /// Do not code 
7420: 61 20 74 65 73 74 20 66 6f 72 20 74 68 69 73 20  a test for this 
7430: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20  constraint...   
7440: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
7450: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
7460: 6c 69 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d 0a  lic byte omit;..
7470: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
7480: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
7490: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
74a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
74f0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
7500: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 48 65  teIndexInputs He
7510: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
7520: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7530: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
7540: 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  s represents the
7550: 20 76 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20   various inputs 
7560: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
7570: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
7580: 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f 20   /// library to 
7590: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
75a0: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
75b0: 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f  ule.BestIndex" /
75c0: 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f  > method...    /
75d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
75e0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
75f0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
7600: 65 78 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b 0d  exInputs..    {.
7610: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
7620: 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72   Internal Constr
7630: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
7640: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7650: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
7660: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
7670: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
7680: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7690: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
76a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
76b0: 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e  e="nConstraint">
76c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
76d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65  e number of <see
76e0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
76f0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e  exConstraint" />
7700: 20 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20   instances to.. 
7710: 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61         /// pre-a
7720: 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f  llocate space fo
7730: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
7740: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
7750: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7760: 65 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20  e="nOrderBy">.. 
7770: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
7780: 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72  umber of <see cr
7790: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f  ef="SQLiteIndexO
77a0: 72 64 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61  rderBy" /> insta
77b0: 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  nces to..       
77c0: 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74   /// pre-allocat
77d0: 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20  e space for...  
77e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
77f0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  m>..        inte
7800: 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78  rnal SQLiteIndex
7810: 49 6e 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73  Inputs(int nCons
7820: 74 72 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72 64  traint, int nOrd
7830: 65 72 42 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  erBy)..        {
7840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
7850: 6e 73 74 72 61 69 6e 74 73 20 3d 20 6e 65 77 20  nstraints = new 
7860: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
7870: 72 61 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69 6e  raint[nConstrain
7880: 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t];..           
7890: 20 6f 72 64 65 72 42 79 73 20 3d 20 6e 65 77 20   orderBys = new 
78a0: 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72  SQLiteIndexOrder
78b0: 42 79 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a 20  By[nOrderBy];.. 
78c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
78d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
78e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7910: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
7930: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
7940: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
7950: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ties..        pr
7960: 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65  ivate SQLiteInde
7970: 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63 6f  xConstraint[] co
7980: 6e 73 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20 20  nstraints;..    
7990: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
79a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
79b0: 6e 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  n array of <see 
79c0: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
79d0: 78 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20  xConstraint" /> 
79e0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
79f0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  ,..        /// e
7a00: 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69  ach containing i
7a10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c  nformation suppl
7a20: 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ied by the SQLit
7a30: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
7a40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7a50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7a60: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
7a70: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20  dexConstraint[] 
7a80: 43 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20  Constraints..   
7a90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7aa0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
7ab0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d 0d   constraints; }.
7ac0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7ad0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7b20: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
7b30: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
7b40: 72 42 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b 0d  rBy[] orderBys;.
7b50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
7b60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7b70: 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20  /// An array of 
7b80: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
7b90: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f  eIndexOrderBy" /
7ba0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
7bb0: 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es,..        ///
7bc0: 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67   each containing
7bd0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70   information sup
7be0: 70 6c 69 65 64 20 62 79 20 74 68 65 20 53 51 4c  plied by the SQL
7bf0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
7c00: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7c10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7c20: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
7c30: 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f  IndexOrderBy[] O
7c40: 72 64 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20  rderBys..       
7c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7c60: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64  get { return ord
7c70: 65 72 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20  erBys; }..      
7c80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
7c90: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
7ca0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7cb0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d00: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
7d10: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70   SQLiteIndexOutp
7d20: 75 74 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73  uts Helper Class
7d30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
7d40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
7d50: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
7d60: 74 73 20 74 68 65 20 76 61 72 69 6f 75 73 20 6f  ts the various o
7d70: 75 74 70 75 74 73 20 70 72 6f 76 69 64 65 64 20  utputs provided 
7d80: 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  to the SQLite co
7d90: 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72  re..    /// libr
7da0: 61 72 79 20 62 79 20 74 68 65 20 3c 73 65 65 20  ary by the <see 
7db0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
7dc0: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
7dd0: 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
7de0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7df0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
7e00: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51   sealed class SQ
7e10: 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73  LiteIndexOutputs
7e20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7e30: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61   #region Interna
7e40: 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  l Constructors..
7e50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
7e60: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
7e70: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e  // Constructs an
7e80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
7e90: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
7ea0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7eb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
7ec0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73  aram name="nCons
7ed0: 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20  traint">..      
7ee0: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
7ef0: 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
7f00: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
7f10: 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 69 6e  aintUsage" /> in
7f20: 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20  stances..       
7f30: 20 2f 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c 6f   /// to pre-allo
7f40: 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d  cate space for..
7f50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
7f60: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69  aram>..        i
7f70: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e  nternal SQLiteIn
7f80: 64 65 78 4f 75 74 70 75 74 73 28 69 6e 74 20 6e  dexOutputs(int n
7f90: 43 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20  Constraint)..   
7fa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7fb0: 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73      constraintUs
7fc0: 61 67 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74  ages = new SQLit
7fd0: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
7fe0: 55 73 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69 6e  Usage[nConstrain
7ff0: 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t];..        }..
8000: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8010: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8070: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8080: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65          /// Dete
8090: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 6e 61  rmines if the na
80a0: 74 69 76 65 20 65 73 74 69 6d 61 74 65 64 52 6f  tive estimatedRo
80b0: 77 73 20 66 69 65 6c 64 20 63 61 6e 20 62 65 20  ws field can be 
80c0: 75 73 65 64 2c 20 62 61 73 65 64 20 6f 6e 0d 0a  used, based on..
80d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
80e0: 61 76 61 69 6c 61 62 6c 65 20 76 65 72 73 69 6f  available versio
80f0: 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20  n of the SQLite 
8100: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
8110: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
8120: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8130: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
8140: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
8150: 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65 20 63  ro if the <see c
8160: 72 65 66 3d 22 45 73 74 69 6d 61 74 65 64 52 6f  ref="EstimatedRo
8170: 77 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  ws" /> property 
8180: 69 73 20 73 75 70 70 6f 72 74 65 64 0d 0a 20 20  is supported..  
8190: 20 20 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65        /// by the
81a0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
81b0: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
81c0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
81d0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
81e0: 6f 6c 20 43 61 6e 55 73 65 45 73 74 69 6d 61 74  ol CanUseEstimat
81f0: 65 64 52 6f 77 73 28 29 0d 0a 20 20 20 20 20 20  edRows()..      
8200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8210: 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76   if (UnsafeNativ
8220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8230: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
8240: 65 72 28 29 20 3e 3d 20 33 30 30 38 30 30 32 29  er() >= 3008002)
8250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8260: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
8270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8280: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
8290: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
82a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
82f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
8300: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
8310: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8320: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
8330: 72 61 69 6e 74 55 73 61 67 65 5b 5d 20 63 6f 6e  raintUsage[] con
8340: 73 74 72 61 69 6e 74 55 73 61 67 65 73 3b 0d 0a  straintUsages;..
8350: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8360: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8370: 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c  // An array of <
8380: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
8390: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
83a0: 73 61 67 65 22 20 2f 3e 20 6f 62 6a 65 63 74 0d  sage" /> object.
83b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
83c0: 74 61 6e 63 65 73 2c 20 65 61 63 68 20 63 6f 6e  tances, each con
83d0: 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61 74  taining informat
83e0: 69 6f 6e 20 74 6f 20 62 65 20 73 75 70 70 6c 69  ion to be suppli
83f0: 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ed to the SQLite
8400: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
8410: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
8420: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
8430: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
8440: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43  lic SQLiteIndexC
8450: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d  onstraintUsage[]
8460: 20 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   ConstraintUsage
8470: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
8480: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
8490: 72 65 74 75 72 6e 20 63 6f 6e 73 74 72 61 69 6e  return constrain
84a0: 74 55 73 61 67 65 73 3b 20 7d 0d 0a 20 20 20 20  tUsages; }..    
84b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
84c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
84d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8510: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
8520: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20  indexNumber;..  
8530: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8540: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8550: 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
8560: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
8570: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
8580: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77 69  .  This value wi
8590: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
85a0: 6c 61 74 65 72 20 62 65 20 70 72 6f 76 69 64 65  later be provide
85b0: 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  d to the <see cr
85c0: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
85d0: 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22  edModule.Filter"
85e0: 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
85f0: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
8600: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8610: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
8620: 20 69 6e 74 20 49 6e 64 65 78 4e 75 6d 62 65 72   int IndexNumber
8630: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8640: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
8650: 65 74 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65  eturn indexNumbe
8660: 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  r; }..          
8670: 20 20 73 65 74 20 7b 20 69 6e 64 65 78 4e 75 6d    set { indexNum
8680: 62 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ber = value; }..
8690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
86a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
86b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
86f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8700: 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
8710: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ng;..        ///
8720: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8730: 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e 67 20 75      /// String u
8740: 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e  sed to help iden
8750: 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65  tify the selecte
8760: 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76  d index.  This v
8770: 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20  alue will..     
8780: 20 20 20 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20     /// later be 
8790: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20  provided to the 
87a0: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
87b0: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
87c0: 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20  Filter" />..    
87d0: 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d      /// method..
87e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
87f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8800: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 49   public string I
8810: 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20  ndexString..    
8820: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8830: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
8840: 69 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a  indexString; }..
8850: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
8860: 7b 20 69 6e 64 65 78 53 74 72 69 6e 67 20 3d 20  { indexString = 
8870: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
8880: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
88e0: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 6e 65    private int ne
88f0: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
8900: 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ing;..        //
8910: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8920: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
8930: 6f 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 73  o if the index s
8940: 74 72 69 6e 67 20 6d 75 73 74 20 62 65 20 66 72  tring must be fr
8950: 65 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  eed by the SQLit
8960: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20  e core..        
8970: 2f 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  /// library...  
8980: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
8990: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
89a0: 62 6c 69 63 20 69 6e 74 20 4e 65 65 64 54 6f 46  blic int NeedToF
89b0: 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a  reeIndexString..
89c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
89d0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
89e0: 75 72 6e 20 6e 65 65 64 54 6f 46 72 65 65 49 6e  urn needToFreeIn
89f0: 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a 20 20  dexString; }..  
8a00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
8a10: 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  needToFreeIndexS
8a20: 74 72 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d  tring = value; }
8a30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8a40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8a90: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
8aa0: 65 20 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e  e int orderByCon
8ab0: 73 75 6d 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  sumed;..        
8ac0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8ad0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
8ae0: 69 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c 72  if output is alr
8af0: 65 61 64 79 20 6f 72 64 65 72 65 64 2e 0d 0a 20  eady ordered... 
8b00: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
8b10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
8b20: 75 62 6c 69 63 20 69 6e 74 20 4f 72 64 65 72 42  ublic int OrderB
8b30: 79 43 6f 6e 73 75 6d 65 64 0d 0a 20 20 20 20 20  yConsumed..     
8b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f    get { return o
8b60: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b 20  rderByConsumed; 
8b70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
8b80: 65 74 20 7b 20 6f 72 64 65 72 42 79 43 6f 6e 73  et { orderByCons
8b90: 75 6d 65 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  umed = value; }.
8ba0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8bb0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
8c00: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
8c10: 20 64 6f 75 62 6c 65 3f 20 65 73 74 69 6d 61 74   double? estimat
8c20: 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20 20 20 20  edCost;..       
8c30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8c40: 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 73 74 69          /// Esti
8c50: 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75 73  mated cost of us
8c60: 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 2e 20  ing this index. 
8c70: 20 55 73 69 6e 67 20 61 20 6e 75 6c 6c 20 76 61   Using a null va
8c80: 6c 75 65 20 68 65 72 65 0d 0a 20 20 20 20 20 20  lue here..      
8c90: 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74 65 73 20    /// indicates 
8ca0: 74 68 61 74 20 61 20 64 65 66 61 75 6c 74 20 65  that a default e
8cb0: 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20 76 61  stimated cost va
8cc0: 6c 75 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73  lue should be us
8cd0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
8ce0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8cf0: 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75 62       public doub
8d00: 6c 65 3f 20 45 73 74 69 6d 61 74 65 64 43 6f 73  le? EstimatedCos
8d10: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
8d20: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
8d30: 72 65 74 75 72 6e 20 65 73 74 69 6d 61 74 65 64  return estimated
8d40: 43 6f 73 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Cost; }..       
8d50: 20 20 20 20 20 73 65 74 20 7b 20 65 73 74 69 6d       set { estim
8d60: 61 74 65 64 43 6f 73 74 20 3d 20 76 61 6c 75 65  atedCost = value
8d70: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
8d80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
8de0: 76 61 74 65 20 6c 6f 6e 67 3f 20 65 73 74 69 6d  vate long? estim
8df0: 61 74 65 64 52 6f 77 73 3b 0d 0a 20 20 20 20 20  atedRows;..     
8e00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8e10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 73  ..        /// Es
8e20: 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
8e30: 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2e  f rows returned.
8e40: 20 20 55 73 69 6e 67 20 61 20 6e 75 6c 6c 20 76    Using a null v
8e50: 61 6c 75 65 20 68 65 72 65 0d 0a 20 20 20 20 20  alue here..     
8e60: 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74 65 73     /// indicates
8e70: 20 74 68 61 74 20 61 20 64 65 66 61 75 6c 74 20   that a default 
8e80: 65 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 76  estimated rows v
8e90: 61 6c 75 65 20 73 68 6f 75 6c 64 20 62 65 20 75  alue should be u
8ea0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
8eb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e        public lon
8ed0: 67 3f 20 45 73 74 69 6d 61 74 65 64 52 6f 77 73  g? EstimatedRows
8ee0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8ef0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
8f00: 65 74 75 72 6e 20 65 73 74 69 6d 61 74 65 64 52  eturn estimatedR
8f10: 6f 77 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ows; }..        
8f20: 20 20 20 20 73 65 74 20 7b 20 65 73 74 69 6d 61      set { estima
8f30: 74 65 64 52 6f 77 73 20 3d 20 76 61 6c 75 65 3b  tedRows = value;
8f40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
8f50: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8f60: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
8f70: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
8f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8fd0: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
8fe0: 65 49 6e 64 65 78 20 48 65 6c 70 65 72 20 43 6c  eIndex Helper Cl
8ff0: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
9000: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9010: 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
9020: 73 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f 75  sents the variou
9030: 73 20 69 6e 70 75 74 73 20 61 6e 64 20 6f 75 74  s inputs and out
9040: 70 75 74 73 20 75 73 65 64 20 77 69 74 68 20 74  puts used with t
9050: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65  he..    /// <see
9060: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
9070: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
9080: 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
9090: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
90a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
90b0: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
90c0: 51 4c 69 74 65 49 6e 64 65 78 0d 0a 20 20 20 20  QLiteIndex..    
90d0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
90e0: 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73  on Internal Cons
90f0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
9100: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9110: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
9120: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
9130: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
9140: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
9150: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9160: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9170: 61 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74  ame="nConstraint
9180: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
9190: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73  The number of <s
91a0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
91b0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 22 20  ndexConstraint" 
91c0: 2f 3e 20 28 61 6e 64 0d 0a 20 20 20 20 20 20 20  /> (and..       
91d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
91e0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
91f0: 72 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 29 20  raintUsage" />) 
9200: 69 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20  instances to..  
9210: 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c        /// pre-al
9220: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72  locate space for
9230: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
9240: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
9250: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9260: 3d 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20  ="nOrderBy">..  
9270: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
9280: 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65  mber of <see cre
9290: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72  f="SQLiteIndexOr
92a0: 64 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e  derBy" /> instan
92b0: 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ces to..        
92c0: 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65  /// pre-allocate
92d0: 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20   space for...   
92e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
92f0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
9300: 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 28  nal SQLiteIndex(
9310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
9320: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a  t nConstraint,..
9330: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9340: 6e 4f 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20  nOrderBy..      
9350: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9370: 69 6e 70 75 74 73 20 3d 20 6e 65 77 20 53 51 4c  inputs = new SQL
9380: 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 28 6e  iteIndexInputs(n
9390: 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64  Constraint, nOrd
93a0: 65 72 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  erBy);..        
93b0: 20 20 20 20 6f 75 74 70 75 74 73 20 3d 20 6e 65      outputs = ne
93c0: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  w SQLiteIndexOut
93d0: 70 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74  puts(nConstraint
93e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
93f0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9400: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9460: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
9470: 20 4d 61 72 73 68 61 6c 20 48 65 6c 70 65 72 20   Marshal Helper 
9480: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
9490: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
94a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
94b0: 65 72 74 73 20 61 20 6e 61 74 69 76 65 20 70 6f  erts a native po
94c0: 69 6e 74 65 72 20 74 6f 20 61 20 6e 61 74 69 76  inter to a nativ
94d0: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
94e0: 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0d 0a  info structure..
94f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 6f          /// into
9500: 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66   a new <see cref
9510: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f  ="SQLiteIndex" /
9520: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
9530: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
9540: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9550: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9560: 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20  ame="pIndex">.. 
9570: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
9580: 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
9590: 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   the native sqli
95a0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73  te3_index_info s
95b0: 74 72 75 63 74 75 72 65 20 74 6f 0d 0a 20 20 20  tructure to..   
95c0: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74       /// convert
95d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
95e0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
95f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9600: 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  ="index">..     
9610: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
9620: 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
9630: 74 65 72 20 77 69 6c 6c 20 62 65 20 6d 6f 64 69  ter will be modi
9640: 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
9650: 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20 20 20 20  the newly..     
9660: 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 20 3c     /// created <
9670: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
9680: 49 6e 64 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74  Index" /> object
9690: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
96a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
96b0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
96c0: 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 46  al static void F
96d0: 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  romIntPtr(..    
96e0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
96f0: 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20  Index,..        
9700: 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 49 6e      ref SQLiteIn
9710: 64 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20  dex index..     
9720: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9740: 20 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20 49   if (pIndex == I
9750: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9770: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9780: 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20 3d      int offset =
9790: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
97a0: 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69     int nConstrai
97b0: 6e 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  nt = SQLiteMarsh
97c0: 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 70 49 6e  al.ReadInt32(pIn
97d0: 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d  dex, offset);...
97e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
97f0: 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  set = SQLiteMars
9800: 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65 74 4f 66  hal.NextOffsetOf
9810: 28 6f 66 66 73 65 74 2c 20 73 69 7a 65 6f 66 28  (offset, sizeof(
9820: 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  int),..         
9830: 20 20 20 20 20 20 20 49 6e 74 50 74 72 2e 53 69         IntPtr.Si
9840: 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ze);....        
9850: 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73      IntPtr pCons
9860: 74 72 61 69 6e 74 20 3d 20 53 51 4c 69 74 65 4d  traint = SQLiteM
9870: 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
9880: 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  r(pIndex, offset
9890: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
98a0: 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
98b0: 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
98c0: 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 49 6e  setOf(offset, In
98d0: 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20 20  tPtr.Size,..    
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
98f0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20  of(int));....   
9900: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4f 72           int nOr
9910: 64 65 72 42 79 20 3d 20 53 51 4c 69 74 65 4d 61  derBy = SQLiteMa
9920: 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28  rshal.ReadInt32(
9930: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
9940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9950: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
9960: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
9970: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
9980: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
9990: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
99a0: 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Size);....     
99b0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4f         IntPtr pO
99c0: 72 64 65 72 42 79 20 3d 20 53 51 4c 69 74 65 4d  rderBy = SQLiteM
99d0: 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
99e0: 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  r(pIndex, offset
99f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9a00: 20 20 69 6e 64 65 78 20 3d 20 6e 65 77 20 53 51    index = new SQ
9a10: 4c 69 74 65 49 6e 64 65 78 28 6e 43 6f 6e 73 74  LiteIndex(nConst
9a20: 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29  raint, nOrderBy)
9a30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9a40: 20 54 79 70 65 20 69 6e 64 65 78 43 6f 6e 73 74   Type indexConst
9a50: 72 61 69 6e 74 54 79 70 65 20 3d 20 74 79 70 65  raintType = type
9a60: 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
9a70: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
9a80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9a90: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
9aa0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
9ab0: 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e     int sizeOfCon
9ac0: 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 4d 61  straintType = Ma
9ad0: 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 69 6e 64  rshal.SizeOf(ind
9ae0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 54 79 70 65  exConstraintType
9af0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9b00: 20 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73    for (int iCons
9b10: 74 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e  traint = 0; iCon
9b20: 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74  straint < nConst
9b30: 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69  raint; iConstrai
9b40: 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  nt++)..         
9b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9b60: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4f 66        IntPtr pOf
9b70: 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d 61 72  fset = SQLiteMar
9b80: 73 68 61 6c 2e 49 6e 74 50 74 72 46 6f 72 4f 66  shal.IntPtrForOf
9b90: 66 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20  fset(..         
9ba0: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e 73             pCons
9bb0: 74 72 61 69 6e 74 2c 20 69 43 6f 6e 73 74 72 61  traint, iConstra
9bc0: 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73  int * sizeOfCons
9bd0: 74 72 61 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a  traintType);....
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9c00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
9c10: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  x_constraint con
9c20: 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20 20  straint =..     
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
9c40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9c50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
9c60: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 29 0d 0a 20  x_constraint).. 
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c80: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50         Marshal.P
9c90: 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 70 4f  trToStructure(pO
9ca0: 66 66 73 65 74 2c 20 69 6e 64 65 78 43 6f 6e 73  ffset, indexCons
9cb0: 74 72 61 69 6e 74 54 79 70 65 29 3b 0d 0a 0d 0a  traintType);....
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e  index.Inputs.Con
9ce0: 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72  straints[iConstr
9cf0: 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20  aint] =..       
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
9d10: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
9d20: 74 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e  traint(constrain
9d30: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
9d40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9d50: 20 20 54 79 70 65 20 69 6e 64 65 78 4f 72 64 65    Type indexOrde
9d60: 72 42 79 54 79 70 65 20 3d 20 74 79 70 65 6f 66  rByType = typeof
9d70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9d80: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9d90: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
9da0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 3b 0d 0a  ndex_orderby);..
9db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
9dc0: 74 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54  t sizeOfOrderByT
9dd0: 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
9de0: 7a 65 4f 66 28 69 6e 64 65 78 4f 72 64 65 72 42  zeOf(indexOrderB
9df0: 79 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yType);....     
9e00: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
9e10: 69 4f 72 64 65 72 42 79 20 3d 20 30 3b 20 69 4f  iOrderBy = 0; iO
9e20: 72 64 65 72 42 79 20 3c 20 6e 4f 72 64 65 72 42  rderBy < nOrderB
9e30: 79 3b 20 69 4f 72 64 65 72 42 79 2b 2b 29 0d 0a  y; iOrderBy++)..
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
9e60: 6e 74 50 74 72 20 70 4f 66 66 73 65 74 20 3d 20  ntPtr pOffset = 
9e70: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e  SQLiteMarshal.In
9e80: 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a  tPtrForOffset(..
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 20 20 20 70 4f 72 64 65 72 42 79 2c 20 69 4f      pOrderBy, iO
9eb0: 72 64 65 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f  rderBy * sizeOfO
9ec0: 72 64 65 72 42 79 54 79 70 65 29 3b 0d 0a 0d 0a  rderByType);....
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9ef0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
9f00: 78 5f 6f 72 64 65 72 62 79 20 6f 72 64 65 72 42  x_orderby orderB
9f10: 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
9f20: 20 20 20 20 20 20 20 20 20 28 55 6e 73 61 66 65           (Unsafe
9f30: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9f40: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
9f50: 72 62 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rby)..          
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
9f70: 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 75 63  rshal.PtrToStruc
9f80: 74 75 72 65 28 70 4f 66 66 73 65 74 2c 20 69 6e  ture(pOffset, in
9f90: 64 65 78 4f 72 64 65 72 42 79 54 79 70 65 29 3b  dexOrderByType);
9fa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fb0: 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73      index.Inputs
9fc0: 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72  .OrderBys[iOrder
9fd0: 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  By] =..         
9fe0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
9ff0: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
a000: 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20  y(orderBy);..   
a010: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a080: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a090: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 50  >..        /// P
a0a0: 6f 70 75 6c 61 74 65 73 20 74 68 65 20 6f 75 74  opulates the out
a0b0: 70 75 74 73 20 6f 66 20 61 20 70 72 65 2d 61 6c  puts of a pre-al
a0c0: 6c 6f 63 61 74 65 64 20 6e 61 74 69 76 65 20 73  located native s
a0d0: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
a0e0: 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  o..        /// s
a0f0: 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 61  tructure using a
a100: 6e 20 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20  n existing <see 
a110: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65  cref="SQLiteInde
a120: 78 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20  x" /> object..  
a130: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
a140: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
a150: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
a160: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
a170: 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
a180: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
a190: 78 69 73 74 69 6e 67 20 3c 73 65 65 20 63 72 65  xisting <see cre
a1a0: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20  f="SQLiteIndex" 
a1b0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
a1c0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
a1d0: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f         /// the o
a1e0: 75 74 70 75 74 20 64 61 74 61 20 74 6f 20 75 73  utput data to us
a1f0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
a200: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
a210: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
a220: 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20  e="pIndex">..   
a230: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
a240: 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
a250: 68 65 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64  he pre-allocated
a260: 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
a270: 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20 20  index_info..    
a280: 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
a290: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
a2a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
a2b0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
a2c0: 63 20 76 6f 69 64 20 54 6f 49 6e 74 50 74 72 28  c void ToIntPtr(
a2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
a2e0: 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 2c  LiteIndex index,
a2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
a300: 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20  tPtr pIndex..   
a310: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a320: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a330: 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3d 3d     if ((index ==
a340: 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65 78   null) || (index
a350: 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29  .Inputs == null)
a360: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
a370: 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e 70 75       (index.Inpu
a380: 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 20 3d  ts.Constraints =
a390: 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20  = null) ||..    
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64              (ind
a3b0: 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d 20 6e 75  ex.Outputs == nu
a3c0: 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ll) ||..        
a3d0: 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 4f          (index.O
a3e0: 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  utputs.Constrain
a3f0: 74 55 73 61 67 65 73 20 3d 3d 20 6e 75 6c 6c 29  tUsages == null)
a400: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a420: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
a430: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a440: 20 20 20 20 20 20 20 20 69 66 20 28 70 49 6e 64          if (pInd
a450: 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ex == IntPtr.Zer
a460: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
a470: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a480: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
a490: 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  ffset = 0;....  
a4a0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43            int nC
a4b0: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69  onstraint = SQLi
a4c0: 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  teMarshal.ReadIn
a4d0: 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
a4e0: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
a4f0: 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61      if (nConstra
a500: 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 49 6e 70  int != index.Inp
a510: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
a520: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  Length)..       
a530: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
a540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a550: 69 66 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20  if (nConstraint 
a560: 21 3d 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73  != index.Outputs
a570: 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
a580: 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20  s.Length)..     
a590: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a5a0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
a5b0: 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
a5c0: 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
a5d0: 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69  setOf(offset, si
a5e0: 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20  zeof(int),..    
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
a600: 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20  tr.Size);....   
a610: 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
a620: 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e  = SQLiteMarshal.
a630: 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66  NextOffsetOf(off
a640: 73 65 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65  set, IntPtr.Size
a650: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a660: 20 20 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b     sizeof(int));
a670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a680: 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74 65 4d  offset = SQLiteM
a690: 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66 73 65  arshal.NextOffse
a6a0: 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69 7a 65  tOf(offset, size
a6b0: 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20 20 20  of(int),..      
a6c0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
a6d0: 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Size);....     
a6e0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
a6f0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
a700: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
a710: 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d  t, IntPtr.Size,.
a720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a730: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   sizeof(int));..
a740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
a750: 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74  tPtr pConstraint
a760: 55 73 61 67 65 20 3d 20 53 51 4c 69 74 65 4d 61  Usage = SQLiteMa
a770: 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72  rshal.ReadIntPtr
a780: 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29  (pIndex, offset)
a790: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a7a0: 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74   int sizeOfConst
a7b0: 72 61 69 6e 74 55 73 61 67 65 54 79 70 65 20 3d  raintUsageType =
a7c0: 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28   Marshal.SizeOf(
a7d0: 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20  typeof(..       
a7e0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
a7f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a800: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
a810: 72 61 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d 0a  raint_usage));..
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
a830: 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69  r (int iConstrai
a840: 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61  nt = 0; iConstra
a850: 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e  int < nConstrain
a860: 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b  t; iConstraint++
a870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a890: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
a8a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
a8b0: 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75  dex_constraint_u
a8c0: 73 61 67 65 20 63 6f 6e 73 74 72 61 69 6e 74 55  sage constraintU
a8d0: 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  sage =..        
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
a8f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a900: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
a910: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
a920: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
a940: 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
a950: 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e  raintUsages[iCon
a960: 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a 20 20  straint]);....  
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
a980: 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65 54  rshal.StructureT
a990: 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  oPtr(..         
a9a0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
a9b0: 72 61 69 6e 74 55 73 61 67 65 2c 20 53 51 4c 69  raintUsage, SQLi
a9c0: 74 65 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72  teMarshal.IntPtr
a9d0: 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20  ForOffset(..    
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 70 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  pConstraintUsage
aa00: 2c 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20  , iConstraint * 
aa10: 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
aa20: 55 73 61 67 65 54 79 70 65 29 2c 0d 0a 20 20 20  UsageType),..   
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa40: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
aa50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
aa60: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
aa70: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 4e 65  SQLiteMarshal.Ne
aa80: 78 74 4f 66 66 73 65 74 4f 66 28 6f 66 66 73 65  xtOffsetOf(offse
aa90: 74 2c 20 49 6e 74 50 74 72 2e 53 69 7a 65 2c 0d  t, IntPtr.Size,.
aaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aab0: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   sizeof(int));..
aac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
aad0: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
aae0: 65 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  eInt32(pIndex, o
aaf0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
ab00: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
ab10: 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65  tputs.IndexNumbe
ab20: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
ab30: 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69     offset = SQLi
ab40: 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66  teMarshal.NextOf
ab50: 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73  fsetOf(offset, s
ab60: 69 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20  izeof(int),..   
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
ab80: 50 74 72 2e 53 69 7a 65 29 3b 0d 0a 0d 0a 20 20  Ptr.Size);....  
ab90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
aba0: 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
abb0: 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
abc0: 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
abd0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e       SQLiteStrin
abe0: 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
abf0: 53 74 72 69 6e 67 28 69 6e 64 65 78 2e 4f 75 74  String(index.Out
ac00: 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67  puts.IndexString
ac10: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
ac20: 20 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69     offset = SQLi
ac30: 74 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66  teMarshal.NextOf
ac40: 66 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 49  fsetOf(offset, I
ac50: 6e 74 50 74 72 2e 53 69 7a 65 2c 0d 0a 20 20 20  ntPtr.Size,..   
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a               siz
ac70: 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20  eof(int));....  
ac80: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
ac90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
aca0: 45 3a 20 57 65 20 6a 75 73 74 20 61 6c 6c 6f 63  E: We just alloc
acb0: 61 74 65 64 20 74 68 65 20 49 6e 64 65 78 53 74  ated the IndexSt
acc0: 72 69 6e 67 20 66 69 65 6c 64 3b 20 74 68 65 72  ring field; ther
acd0: 65 66 6f 72 65 2c 20 77 65 0d 0a 20 20 20 20 20  efore, we..     
ace0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
acf0: 6e 65 65 64 20 74 6f 20 73 65 74 20 74 68 65 20  need to set the 
ad00: 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  NeedToFreeIndexS
ad10: 74 72 69 6e 67 20 66 69 65 6c 64 20 74 6f 20 6e  tring field to n
ad20: 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  on-zero...      
ad30: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ad40: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
ad50: 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70  hal.WriteInt32(p
ad60: 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 20 31  Index, offset, 1
ad70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ad80: 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
ad90: 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
ada0: 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69  setOf(offset, si
adb0: 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20  zeof(int),..    
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
add0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20  of(int));....   
ade0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
adf0: 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
ae00: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
ae10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ae20: 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
ae30: 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64  .OrderByConsumed
ae40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ae50: 20 20 6f 66 66 73 65 74 20 3d 20 53 51 4c 69 74    offset = SQLit
ae60: 65 4d 61 72 73 68 61 6c 2e 4e 65 78 74 4f 66 66  eMarshal.NextOff
ae70: 73 65 74 4f 66 28 6f 66 66 73 65 74 2c 20 73 69  setOf(offset, si
ae80: 7a 65 6f 66 28 69 6e 74 29 2c 0d 0a 20 20 20 20  zeof(int),..    
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
aea0: 6f 66 28 64 6f 75 62 6c 65 29 29 3b 0d 0a 0d 0a  of(double));....
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aec0: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45 73  index.Outputs.Es
aed0: 74 69 6d 61 74 65 64 43 6f 73 74 2e 48 61 73 56  timatedCost.HasV
aee0: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
aef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af00: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
af10: 68 61 6c 2e 57 72 69 74 65 44 6f 75 62 6c 65 28  hal.WriteDouble(
af20: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d  pIndex, offset,.
af30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
af40: 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
af50: 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74  ts.EstimatedCost
af60: 2e 47 65 74 56 61 6c 75 65 4f 72 44 65 66 61 75  .GetValueOrDefau
af70: 6c 74 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  lt());..        
af80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
af90: 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f       if (index.O
afa0: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45 73 74  utputs.CanUseEst
afb0: 69 6d 61 74 65 64 52 6f 77 73 28 29 20 26 26 0d  imatedRows() &&.
afc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afd0: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45   index.Outputs.E
afe0: 73 74 69 6d 61 74 65 64 52 6f 77 73 2e 48 61 73  stimatedRows.Has
aff0: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
b000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b010: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
b020: 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28  shal.WriteInt64(
b030: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d  pIndex, offset,.
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b050: 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
b060: 74 73 2e 45 73 74 69 6d 61 74 65 64 52 6f 77 73  ts.EstimatedRows
b070: 2e 47 65 74 56 61 6c 75 65 4f 72 44 65 66 61 75  .GetValueOrDefau
b080: 6c 74 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  lt());..        
b090: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
b0a0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b0b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b110: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
b120: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
b130: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
b140: 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20  LiteIndexInputs 
b150: 69 6e 70 75 74 73 3b 0d 0a 20 20 20 20 20 20 20  inputs;..       
b160: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
b170: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
b180: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
b190: 65 49 6e 64 65 78 49 6e 70 75 74 73 22 20 2f 3e  eIndexInputs" />
b1a0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
b1b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
b1c0: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 70       /// the inp
b1d0: 75 74 73 20 74 6f 20 74 68 65 20 3c 73 65 65 20  uts to the <see 
b1e0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
b1f0: 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49  agedModule.BestI
b200: 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ndex" />..      
b210: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
b220: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
b230: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
b240: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
b250: 78 49 6e 70 75 74 73 20 49 6e 70 75 74 73 0d 0a  xInputs Inputs..
b260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b270: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
b280: 75 72 6e 20 69 6e 70 75 74 73 3b 20 7d 0d 0a 20  urn inputs; }.. 
b290: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b2a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b2f0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
b300: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
b310: 73 20 6f 75 74 70 75 74 73 3b 0d 0a 20 20 20 20  s outputs;..    
b320: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b330: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
b340: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
b350: 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73  LiteIndexOutputs
b360: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
b370: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
b380: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
b390: 20 6f 75 74 70 75 74 73 20 66 72 6f 6d 20 74 68   outputs from th
b3a0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
b3b0: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
b3c0: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 0d  e.BestIndex" />.
b3d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
b3e0: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
b3f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b400: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
b410: 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20  iteIndexOutputs 
b420: 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20  Outputs..       
b430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b440: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 75 74  get { return out
b450: 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  puts; }..       
b460: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
b470: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
b480: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b490: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4e0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
b4f0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
b500: 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20  le Base Class.. 
b510: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b520: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
b530: 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20  lass represents 
b540: 61 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61  a managed virtua
b550: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
b560: 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 0d 0a  tation.  It is..
b570: 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 73 65 61 6c      /// not seal
b580: 65 64 20 61 6e 64 20 73 68 6f 75 6c 64 20 62 65  ed and should be
b590: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 61 73   used as the bas
b5a0: 65 20 63 6c 61 73 73 20 66 6f 72 20 61 6e 79 20  e class for any 
b5b0: 75 73 65 72 2d 64 65 66 69 6e 65 64 0d 0a 20 20  user-defined..  
b5c0: 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
b5d0: 62 6c 65 20 63 6c 61 73 73 65 73 20 69 6d 70 6c  ble classes impl
b5e0: 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61 67  emented in manag
b5f0: 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ed code...    //
b600: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b610: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
b620: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
b630: 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e :..           
b640: 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61   ISQLiteNativeHa
b650: 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73 61 62 6c  ndle, IDisposabl
b660: 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20  e /* NOT SEALED 
b670: 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  */..    {..     
b680: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
b690: 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
b6a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b6b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
b6c0: 20 54 68 65 20 69 6e 64 65 78 20 77 69 74 68 69   The index withi
b6d0: 6e 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 73  n the array of s
b6e0: 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20  trings provided 
b6f0: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
b700: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
b710: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
b720: 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61  ule.Create" /> a
b730: 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  nd..        /// 
b740: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
b750: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e  teManagedModule.
b760: 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68  Connect" /> meth
b770: 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ods containing t
b780: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
b790: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64 75  name of the modu
b7a0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  le implementing 
b7b0: 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
b7c0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
b7d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
b7e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
b7f0: 73 74 20 69 6e 74 20 4d 6f 64 75 6c 65 4e 61 6d  st int ModuleNam
b800: 65 49 6e 64 65 78 20 3d 20 30 3b 0d 0a 0d 0a 20  eIndex = 0;.... 
b810: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b860: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
b870: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b880: 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77   /// The index w
b890: 69 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20  ithin the array 
b8a0: 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69  of strings provi
b8b0: 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
b8c0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
b8d0: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
b8e0: 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20  dModule.Create" 
b8f0: 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  /> and..        
b900: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
b910: 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64  SQLiteManagedMod
b920: 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  ule.Connect" /> 
b930: 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69  methods containi
b940: 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ng the..        
b950: 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  /// name of the 
b960: 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e  database contain
b970: 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c  ing this virtual
b980: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
b990: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b9a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b9b0: 20 63 6f 6e 73 74 20 69 6e 74 20 44 61 74 61 62   const int Datab
b9c0: 61 73 65 4e 61 6d 65 49 6e 64 65 78 20 3d 20 31  aseNameIndex = 1
b9d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ba30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ba40: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
ba50: 6e 64 65 78 20 77 69 74 68 69 6e 20 74 68 65 20  ndex within the 
ba60: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
ba70: 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
ba80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
ba90: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
baa0: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72  ManagedModule.Cr
bab0: 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20  eate" /> and..  
bac0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
bad0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
bae0: 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63  gedModule.Connec
baf0: 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f  t" /> methods co
bb00: 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20  ntaining the..  
bb10: 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f        /// name o
bb20: 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
bb30: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
bb40: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
bb50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
bb60: 6e 73 74 20 69 6e 74 20 54 61 62 6c 65 4e 61 6d  nst int TableNam
bb70: 65 49 6e 64 65 78 20 3d 20 32 3b 0d 0a 20 20 20  eIndex = 2;..   
bb80: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
bb90: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
bbf0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
bc00: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
bc10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
bc20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
bc30: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
bc40: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
bc50: 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
bc60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
bc70: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
bc80: 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 73 22  name="arguments"
bc90: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
bca0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 72 61  he original arra
bcb0: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72 6f  y of strings pro
bcc0: 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
bcd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
bce0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
bcf0: 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65  gedModule.Create
bd00: 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20  " /> and..      
bd10: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
bd20: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
bd30: 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f  odule.Connect" /
bd40: 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  > methods...    
bd50: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
bd60: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
bd70: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
bd80: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
bd90: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
bda0: 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ents..          
bdb0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
bdd0: 2e 61 72 67 75 6d 65 6e 74 73 20 3d 20 61 72 67  .arguments = arg
bde0: 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20  uments;..       
bdf0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
be00: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
be10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
be60: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
be70: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
be80: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
be90: 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
bea0: 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts;..        ///
beb0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
bec0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67      /// The orig
bed0: 69 6e 61 6c 20 61 72 72 61 79 20 6f 66 20 73 74  inal array of st
bee0: 72 69 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74  rings provided t
bef0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
bf00: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
bf10: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
bf20: 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e  le.Create" /> an
bf30: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
bf40: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
bf50: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43  eManagedModule.C
bf60: 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f  onnect" /> metho
bf70: 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ds...        ///
bf80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
bf90: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
bfa0: 75 61 6c 20 73 74 72 69 6e 67 5b 5d 20 41 72 67  ual string[] Arg
bfb0: 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  uments..        
bfc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
bfd0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
bfe0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 61 72 67  ed(); return arg
bff0: 75 6d 65 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20  uments; }..     
c000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c060: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c070: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
c080: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f  e name of the mo
c090: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  dule implementin
c0a0: 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  g this virtual t
c0b0: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
c0c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c0d0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
c0e0: 72 74 75 61 6c 20 73 74 72 69 6e 67 20 4d 6f 64  rtual string Mod
c0f0: 75 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  uleName..       
c100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c110: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
c120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c130: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
c140: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
c150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
c160: 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67   arguments = Arg
c170: 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20  uments;....     
c180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
c190: 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c  arguments != nul
c1a0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
c1b0: 20 20 20 20 20 20 20 20 20 20 20 28 61 72 67 75             (argu
c1c0: 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 4d  ments.Length > M
c1d0: 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29  oduleNameIndex))
c1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c1f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c200: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c210: 61 72 67 75 6d 65 6e 74 73 5b 4d 6f 64 75 6c 65  arguments[Module
c220: 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20  NameIndex];..   
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
c260: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c280: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
c290: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c2a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c2b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c2c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c310: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
c320: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
c330: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
c340: 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e  database contain
c350: 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c  ing this virtual
c360: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
c370: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
c380: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
c390: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 44  virtual string D
c3a0: 61 74 61 62 61 73 65 4e 61 6d 65 0d 0a 20 20 20  atabaseName..   
c3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c3c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
c3d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c3e0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
c3f0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c410: 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d  ng[] arguments =
c420: 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20   Arguments;.... 
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c440: 66 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d  f ((arguments !=
c450: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
c470: 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68  arguments.Length
c480: 20 3e 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49   > DatabaseNameI
c490: 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20  ndex))..        
c4a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c4c0: 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b  eturn arguments[
c4d0: 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65  DatabaseNameInde
c4e0: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
c4f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c500: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c530: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
c540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
c550: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c560: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
c570: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
c580: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
c5d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
c5e0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
c5f0: 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
c600: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
c610: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
c620: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
c630: 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54 61  irtual string Ta
c640: 62 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  bleName..       
c650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c660: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
c670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c680: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
c690: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
c6a0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
c6b0: 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 41 72 67   arguments = Arg
c6c0: 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20 20 20 20  uments;....     
c6d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
c6e0: 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c  arguments != nul
c6f0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
c700: 20 20 20 20 20 20 20 20 20 20 20 28 61 72 67 75             (argu
c710: 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 54  ments.Length > T
c720: 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d  ableNameIndex)).
c730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
c760: 72 67 75 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61  rguments[TableNa
c770: 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  meIndex];..     
c780: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
c7a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
c7b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c7c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c7d0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
c7e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c7f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c800: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c850: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c860: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
c870: 65 49 6e 64 65 78 20 69 6e 64 65 78 3b 0d 0a 20  eIndex index;.. 
c880: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
c890: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
c8a0: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
c8b0: 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e  "SQLiteIndex" />
c8c0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
c8d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
c8e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
c8f0: 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e   data for the in
c900: 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73  puts and outputs
c910: 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 74 68 65   relating to the
c920: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 64   most recent ind
c930: 65 78 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ex..        /// 
c940: 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  selection...    
c950: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c960: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
c970: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
c980: 65 49 6e 64 65 78 20 49 6e 64 65 78 0d 0a 20 20  eIndex Index..  
c990: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c9a0: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
c9b0: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
c9c0: 72 6e 20 69 6e 64 65 78 3b 20 7d 0d 0a 20 20 20  rn index; }..   
c9d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c9e0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
c9f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ca40: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
ca50: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
ca60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
ca70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
ca80: 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
ca90: 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20  should normally 
caa0: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 0d 0a  be used by the..
cab0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
cac0: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
cad0: 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
cae0: 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
caf0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20   in order to..  
cb00: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72        /// perfor
cb10: 6d 20 69 6e 64 65 78 20 73 65 6c 65 63 74 69 6f  m index selectio
cb20: 6e 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  n based on the c
cb30: 6f 6e 73 74 72 61 69 6e 74 73 20 70 72 6f 76 69  onstraints provi
cb40: 64 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ded by the..    
cb50: 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
cb60: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
cb70: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
cb80: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
cb90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
cba0: 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
cbb0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
cbc0: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22 20  f="SQLiteIndex" 
cbd0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
cbe0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c  ce containing al
cbf0: 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  l the..        /
cc00: 2f 2f 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  // data for the 
cc10: 69 6e 70 75 74 73 20 61 6e 64 20 6f 75 74 70 75  inputs and outpu
cc20: 74 73 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 69  ts relating to i
cc30: 6e 64 65 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d  ndex selection..
cc40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
cc50: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
cc60: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
cc70: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
cc80: 72 6f 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e  ro upon success.
cc90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
cca0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
ccb0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
ccc0: 20 62 6f 6f 6c 20 42 65 73 74 49 6e 64 65 78 28   bool BestIndex(
ccd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
cce0: 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d  LiteIndex index.
ccf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
cd00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cd10: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
cd20: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
cd30: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
cd40: 78 20 3d 20 69 6e 64 65 78 3b 0d 0a 0d 0a 20 20  x = index;....  
cd50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
cd60: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
cd70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
cd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
cdd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
cde0: 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d         /// Attem
cdf0: 70 74 73 20 74 6f 20 72 65 63 6f 72 64 20 74 68  pts to record th
ce00: 65 20 72 65 6e 61 6d 69 6e 67 20 6f 66 20 74 68  e renaming of th
ce10: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
ce20: 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
ce30: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
ce40: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
ce50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
ce60: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ce70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
ce80: 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
ce90: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77       /// The new
cea0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 76 69   name for the vi
ceb0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
cec0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
ced0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
cee0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
cef0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
cf00: 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success... 
cf10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
cf20: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70  urns>..        p
cf30: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f  ublic virtual bo
cf40: 6f 6c 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  ol Rename(..    
cf50: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
cf60: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
cf70: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
cf80: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
cf90: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
cfa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
cfb0: 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75 6c  arguments != nul
cfc0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
cfd0: 20 20 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74         (argument
cfe0: 73 2e 4c 65 6e 67 74 68 20 3e 20 54 61 62 6c 65  s.Length > Table
cff0: 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20  NameIndex))..   
d000: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d010: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
d020: 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61 6d 65 49  ments[TableNameI
d030: 6e 64 65 78 5d 20 3d 20 6e 61 6d 65 3b 0d 0a 20  ndex] = name;.. 
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d050: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
d060: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d070: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d080: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
d090: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
d0a0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
d0b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d100: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
d110: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
d120: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
d130: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
d140: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a   nativeHandle;..
d150: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
d160: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
d170: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75  // Returns the u
d180: 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65  nderlying SQLite
d190: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61   native handle a
d1a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
d1b0: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
d1c0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
d1d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
d1e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
d1f0: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
d200: 6c 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48  l IntPtr NativeH
d210: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  andle..        {
d220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
d230: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
d240: 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69  d(); return nati
d250: 76 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20  veHandle; }..   
d260: 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61           interna
d270: 6c 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61  l set { nativeHa
d280: 6e 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ndle = value; }.
d290: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d2a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
d2b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d300: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
d310: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
d320: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
d330: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d340: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73  .        /// Dis
d350: 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62  poses of this ob
d360: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
d370: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d380: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d390: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
d3a0: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ose()..        {
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69  ..            Di
d3c0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
d3d0: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
d3e0: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
d3f0: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  is);..        }.
d400: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
d410: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d460: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d470: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
d480: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
d490: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
d4a0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
d4b0: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
d4c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d4d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
d4e0: 77 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d  ws an <see cref=
d4f0: 22 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45  "ObjectDisposedE
d500: 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20  xception" /> if 
d510: 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20  this object..   
d520: 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
d530: 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f  e has been dispo
d540: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
d550: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d560: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
d570: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
d580: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
d590: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54          {..#if T
d5a0: 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
d5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d5c0: 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
d5d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
d5f0: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
d600: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
d630: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 29 2e 4e  eVirtualTable).N
d640: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
d650: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
d660: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d670: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d6c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
d6d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
d6e0: 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69   Disposes of thi
d6f0: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
d700: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
d710: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d720: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d730: 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e  ame="disposing">
d740: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
d750: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d  n-zero if this m
d760: 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20 63  ethod is being c
d770: 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a  alled from the..
d780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
d790: 20 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28 29   cref="Dispose()
d7a0: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65  " /> method.  Ze
d7b0: 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
d7c0: 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65  d is being calle
d7d0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66  d..        /// f
d7e0: 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  rom the finalize
d7f0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
d800: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
d810: 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
d820: 75 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ual void Dispose
d830: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
d840: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d850: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
d860: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
d870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d880: 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69          //if (di
d890: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
d8a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20            //{.. 
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d8c0: 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  /    ///////////
d8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
d8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
d900: 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61   // dispose mana
d910: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
d920: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
d930: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
d970: 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20     //}....      
d980: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
d990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9c0: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
d9d0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
d9e0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
d9f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
da00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
da30: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
da40: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
da50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
da60: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
da70: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
da80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
daa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dac0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
dad0: 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
dae0: 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  tor..        ///
daf0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
db00: 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65      /// Finalize
db10: 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  s this object in
db20: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
db30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
db40: 0a 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65  .        ~SQLite
db50: 56 69 72 74 75 61 6c 54 61 62 6c 65 28 29 0d 0a  VirtualTable()..
db60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
db70: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
db80: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
db90: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
dba0: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
dbb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
dbc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dc10: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
dc20: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
dc30: 65 43 75 72 73 6f 72 20 42 61 73 65 20 43 6c 61  eCursor Base Cla
dc40: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
dc50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
dc60: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
dc70: 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76  ents a managed v
dc80: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
dc90: 73 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  sor implementati
dca0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 20  on...    /// It 
dcb0: 69 73 20 6e 6f 74 20 73 65 61 6c 65 64 20 61 6e  is not sealed an
dcc0: 64 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  d should be used
dcd0: 20 61 73 20 74 68 65 20 62 61 73 65 20 63 6c 61   as the base cla
dce0: 73 73 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20  ss for any..    
dcf0: 2f 2f 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64  /// user-defined
dd00: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
dd10: 75 72 73 6f 72 20 63 6c 61 73 73 65 73 20 69 6d  ursor classes im
dd20: 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e  plemented in man
dd30: 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20  aged code...    
dd40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dd50: 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73      public class
dd60: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
dd70: 62 6c 65 43 75 72 73 6f 72 20 3a 0d 0a 20 20 20  bleCursor :..   
dd80: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
dd90: 4e 61 74 69 76 65 48 61 6e 64 6c 65 2c 20 49 44  NativeHandle, ID
dda0: 69 73 70 6f 73 61 62 6c 65 20 2f 2a 20 4e 4f 54  isposable /* NOT
ddb0: 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20   SEALED */..    
ddc0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
ddd0: 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 43 6f 6e  on Protected Con
dde0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
ddf0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
de00: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
de10: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
de20: 20 61 6e 20 69 6e 76 61 6c 69 64 20 69 6e 74 65   an invalid inte
de30: 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65  ger row sequence
de40: 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   number...      
de50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
de60: 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
de70: 74 65 64 20 73 74 61 74 69 63 20 72 65 61 64 6f  ted static reado
de80: 6e 6c 79 20 69 6e 74 20 49 6e 76 61 6c 69 64 52  nly int InvalidR
de90: 6f 77 49 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20  owIndex = 0;..  
dea0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
deb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
dec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ded0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
def0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
df10: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
df20: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
df30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
df40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 65 6c      /// The fiel
df50: 64 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 74 65  d holds the inte
df60: 67 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65  ger row sequence
df70: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
df80: 63 75 72 72 65 6e 74 20 72 6f 77 0d 0a 20 20 20  current row..   
df90: 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65 64       /// pointed
dfa0: 20 74 6f 20 62 79 20 74 68 69 73 20 63 75 72 73   to by this curs
dfb0: 6f 72 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  or object instan
dfc0: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
dfd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
dfe0: 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74       private int
dff0: 20 72 6f 77 49 6e 64 65 78 3b 0d 0a 20 20 20 20   rowIndex;..    
e000: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e010: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e070: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
e080: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
e090: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
e0a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
e0b0: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
e0c0: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
e0d0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
e0e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e0f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e100: 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
e110: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
e120: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
e130: 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
e140: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
e150: 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
e160: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
e170: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
e180: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
e190: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
e1a0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56    public SQLiteV
e1b0: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
e1c0: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
e1d0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
e1e0: 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  le table..      
e1f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
e200: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
e210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e220: 20 20 20 20 20 20 74 68 69 73 2e 74 61 62 6c 65        this.table
e230: 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20   = table;..     
e240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
e250: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
e260: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e2b0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
e2c0: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
e2d0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
e2e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e2f0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
e300: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
e310: 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
e320: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
e330: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
e340: 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 69 72  rivate SQLiteVir
e350: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
e360: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e370: 20 20 20 20 20 20 20 20 20 20 72 6f 77 49 6e 64            rowInd
e380: 65 78 20 3d 20 49 6e 76 61 6c 69 64 52 6f 77 49  ex = InvalidRowI
e390: 6e 64 65 78 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ndex;..        }
e3a0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
e3b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e410: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
e420: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
e430: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
e440: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
e450: 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20   table;..       
e460: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e470: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
e480: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
e490: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
e4a0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
e4b0: 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
e4c0: 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74        /// with t
e4d0: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
e4e0: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
e4f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e500: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
e510: 74 75 61 6c 20 53 51 4c 69 74 65 56 69 72 74 75  tual SQLiteVirtu
e520: 61 6c 54 61 62 6c 65 20 54 61 62 6c 65 0d 0a 20  alTable Table.. 
e530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e540: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
e550: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
e560: 75 72 6e 20 74 61 62 6c 65 3b 20 7d 0d 0a 20 20  urn table; }..  
e570: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e580: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5a0: 2f 2f 2f 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 2f 0d 0a 0d 0a 20 20  //////////....  
e5d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e        private in
e5e0: 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a  t indexNumber;..
e5f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
e600: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
e610: 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74  // Number used t
e620: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
e630: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
e640: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
e650: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
e660: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
e670: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
e680: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
e690: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
e6a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e6b0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 69  public virtual i
e6c0: 6e 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a  nt IndexNumber..
e6d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e6e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
e6f0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
e700: 74 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72  turn indexNumber
e710: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
e720: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
e780: 76 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64 65  vate string inde
e790: 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20  xString;..      
e7a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
e7b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72  .        /// Str
e7c0: 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
e7d0: 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
e7e0: 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54  lected index.  T
e7f0: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a  his value will..
e800: 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 73          /// be s
e810: 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  et via the <see 
e820: 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e  cref="Filter" />
e830: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
e840: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e850: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
e860: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20   virtual string 
e870: 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20 20  IndexString..   
e880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e890: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
e8a0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
e8b0: 6e 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d  n indexString; }
e8c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
e8d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e920: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e930: 65 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20  e SQLiteValue[] 
e940: 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20  values;..       
e950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e960: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
e970: 76 61 6c 75 65 73 20 75 73 65 64 20 74 6f 20 66  values used to f
e980: 69 6c 74 65 72 20 74 68 65 20 72 6f 77 73 20 72  ilter the rows r
e990: 65 74 75 72 6e 65 64 20 76 69 61 20 74 68 69 73  eturned via this
e9a0: 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 0d 0a   cursor object..
e9b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
e9c0: 61 6e 63 65 2e 20 20 54 68 69 73 20 76 61 6c 75  ance.  This valu
e9d0: 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 76 69  e will be set vi
e9e0: 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  a the <see cref=
e9f0: 22 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20  "Filter" />..   
ea00: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
ea10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ea20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ea30: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
ea40: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56   SQLiteValue[] V
ea50: 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 7b  alues..        {
ea60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
ea70: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
ea80: 64 28 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 75  d(); return valu
ea90: 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  es; }..        }
eaa0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
eab0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
eac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ead0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
eb10: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65     #region Prote
eb20: 63 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a 20 20  cted Methods..  
eb30: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
eb40: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
eb50: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 70 65 72   Attempts to per
eb60: 73 69 73 74 20 74 68 65 20 73 70 65 63 69 66 69  sist the specifi
eb70: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
eb80: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
eb90: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
eba0: 2f 20 69 6e 73 74 61 6e 63 65 73 20 69 6e 20 6f  / instances in o
ebb0: 72 64 65 72 20 74 6f 20 6d 61 6b 65 20 74 68 65  rder to make the
ebc0: 6d 20 61 76 61 69 6c 61 62 6c 65 20 61 66 74 65  m available afte
ebd0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  r the..        /
ebe0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
ebf0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
ec00: 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  le.Filter" /> me
ec10: 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 0d 0a 20  thod returns... 
ec20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
ec30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
ec40: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
ec50: 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20  values">..      
ec60: 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
ec70: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
ec80: 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62  LiteValue" /> ob
ec90: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 74  ject instances t
eca0: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
ecb0: 2f 20 70 65 72 73 69 73 74 65 64 2e 0d 0a 20 20  / persisted...  
ecc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
ecd0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
ece0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
ecf0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
ed00: 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  r of <see cref="
ed10: 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 20  SQLiteValue" /> 
ed20: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
ed30: 20 74 68 61 74 20 77 65 72 65 0d 0a 20 20 20 20   that were..    
ed40: 20 20 20 20 2f 2f 2f 20 73 75 63 63 65 73 73 66      /// successf
ed50: 75 6c 6c 79 20 70 65 72 73 69 73 74 65 64 2e 0d  ully persisted..
ed60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
ed70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
ed80: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
ed90: 61 6c 20 69 6e 74 20 54 72 79 50 65 72 73 69 73  al int TryPersis
eda0: 74 56 61 6c 75 65 73 28 0d 0a 20 20 20 20 20 20  tValues(..      
edb0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
edc0: 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20  e[] values..    
edd0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
ede0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
edf0: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30    int result = 0
ee00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ee10: 20 69 66 20 28 76 61 6c 75 65 73 20 21 3d 20 6e   if (values != n
ee20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
ee30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ee40: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 53 51       foreach (SQ
ee50: 4c 69 74 65 56 61 6c 75 65 20 76 61 6c 75 65 20  LiteValue value 
ee60: 69 6e 20 76 61 6c 75 65 73 29 0d 0a 20 20 20 20  in values)..    
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee90: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
eea0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
eec0: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 69 66 20 28 76 61 6c 75 65 2e 50 65 72 73 69 73  if (value.Persis
eef0: 74 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t())..          
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ef10: 73 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  sult++;..       
ef20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ef30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ef40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ef50: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
ef60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ef70: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
ef80: 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
efd0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
efe0: 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
eff0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
f000: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f010: 54 68 69 73 20 6d 65 74 68 6f 64 20 73 68 6f 75  This method shou
f020: 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 75  ld normally be u
f030: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
f040: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
f050: 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  f="ISQLiteManage
f060: 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20  dModule.Filter" 
f070: 2f 3e 20 6d 65 74 68 6f 64 20 69 6e 20 6f 72 64  /> method in ord
f080: 65 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  er to..        /
f090: 2f 2f 20 70 65 72 66 6f 72 6d 20 66 69 6c 74 65  // perform filte
f0a0: 72 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75  ring of the resu
f0b0: 6c 74 20 72 6f 77 73 20 61 6e 64 2f 6f 72 20 74  lt rows and/or t
f0c0: 6f 20 72 65 63 6f 72 64 20 74 68 65 20 66 69 6c  o record the fil
f0d0: 74 65 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  tering..        
f0e0: 2f 2f 2f 20 63 72 69 74 65 72 69 61 20 70 72 6f  /// criteria pro
f0f0: 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51 4c  vided by the SQL
f100: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f110: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
f120: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f130: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
f140: 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65 72 22  me="indexNumber"
f150: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
f160: 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 68 65  umber used to he
f170: 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  lp identify the 
f180: 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d  selected index..
f190: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
f1a0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
f1b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f1c0: 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d 0a 20  indexString">.. 
f1d0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72 69 6e         /// Strin
f1e0: 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
f1f0: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
f200: 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
f210: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
f220: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
f230: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
f240: 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  es">..        //
f250: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63 6f 72  / The values cor
f260: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 61  responding to ea
f270: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
f280: 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e   selected index.
f290: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f2a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
f2b0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76  public virtual v
f2c0: 6f 69 64 20 46 69 6c 74 65 72 28 0d 0a 20 20 20  oid Filter(..   
f2d0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
f2e0: 65 78 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20  exNumber,..     
f2f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
f300: 64 65 78 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  dexString,..    
f310: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
f320: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20  lue[] values..  
f330: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
f340: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f350: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f360: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
f370: 20 20 20 20 69 66 20 28 28 76 61 6c 75 65 73 20      if ((values 
f380: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 72               (Tr
f3a0: 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 76  yPersistValues(v
f3b0: 61 6c 75 65 73 29 20 21 3d 20 76 61 6c 75 65 73  alues) != values
f3c0: 2e 4c 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20  .Length))..     
f3d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f3e0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f3f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f400: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
f410: 20 20 20 20 20 20 20 20 20 20 22 66 61 69 6c 65            "faile
f420: 64 20 74 6f 20 70 65 72 73 69 73 74 20 6f 6e 65  d to persist one
f430: 20 6f 72 20 6d 6f 72 65 20 76 61 6c 75 65 73 22   or more values"
f440: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f450: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f460: 20 74 68 69 73 2e 69 6e 64 65 78 4e 75 6d 62 65   this.indexNumbe
f470: 72 20 3d 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  r = indexNumber;
f480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f490: 69 73 2e 69 6e 64 65 78 53 74 72 69 6e 67 20 3d  is.indexString =
f4a0: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
f4b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f4c0: 76 61 6c 75 65 73 20 3d 20 76 61 6c 75 65 73 3b  values = values;
f4d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f4e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f530: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f540: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f550: 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
f560: 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 20  the integer row 
f570: 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
f580: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
f590: 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  row...        //
f5a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
f5b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
f5c0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
f5d0: 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77   The integer row
f5e0: 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
f5f0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
f600: 20 72 6f 77 20 2d 4f 52 2d 20 7a 65 72 6f 20 69   row -OR- zero i
f610: 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  f..        /// i
f620: 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65  t cannot be dete
f630: 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20  rmined...       
f640: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
f650: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
f660: 76 69 72 74 75 61 6c 20 69 6e 74 20 47 65 74 52  virtual int GetR
f670: 6f 77 49 6e 64 65 78 28 29 0d 0a 20 20 20 20 20  owIndex()..     
f680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f690: 20 20 72 65 74 75 72 6e 20 72 6f 77 49 6e 64 65    return rowInde
f6a0: 78 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  x;..        }...
f6b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
f6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
f710: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
f720: 20 20 20 2f 2f 2f 20 41 64 6a 75 73 74 73 20 74     /// Adjusts t
f730: 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 20 73  he integer row s
f740: 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
f750: 6f 20 74 68 61 74 20 69 74 20 72 65 66 65 72 73  o that it refers
f760: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
f770: 20 2f 2f 2f 20 6e 65 78 74 20 72 6f 77 2e 0d 0a   /// next row...
f780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
f790: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
f7a0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76  public virtual v
f7b0: 6f 69 64 20 4e 65 78 74 52 6f 77 49 6e 64 65 78  oid NextRowIndex
f7c0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
f7d0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 49 6e             rowIn
f7e0: 64 65 78 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  dex++;..        
f7f0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
f800: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f810: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f850: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f860: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
f870: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
f880: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
f890: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
f8a0: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20  nativeHandle;.. 
f8b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
f8c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
f8d0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e  / Returns the un
f8e0: 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20  derlying SQLite 
f8f0: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73  native handle as
f900: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f910: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
f920: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
f930: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
f940: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f950: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
f960: 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61   IntPtr NativeHa
f970: 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndle..        {.
f980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
f990: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
f9a0: 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76  (); return nativ
f9b0: 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20  eHandle; }..    
f9c0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
f9d0: 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e   set { nativeHan
f9e0: 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  dle = value; }..
f9f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
fa00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
fa10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
fa70: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
fa80: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
fa90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
faa0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
fab0: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
fac0: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
fad0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
fae0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
faf0: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
fb00: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
fb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
fb20: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
fb30: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
fb40: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
fb50: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
fb60: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
fb70: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fbc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fbd0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
fbe0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
fbf0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
fc00: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
fc10: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
fc20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fc30: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
fc40: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
fc50: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
fc60: 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74  ception" /> if t
fc70: 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
fc80: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
fc90: 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
fca0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
fcb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
fcc0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
fcd0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
fce0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
fcf0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
fd00: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
fd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
fd20: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
fd30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fd40: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
fd50: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
fd60: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd80: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
fd90: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
fda0: 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  or).Name);..    
fdb0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
fdc0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
fdd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fe20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
fe30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fe40: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
fe50: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
fe60: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
fe70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
fe80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
fe90: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
fea0: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
feb0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
fec0: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
fed0: 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ing called from 
fee0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
fef0: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73 70   <see cref="Disp
ff00: 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64  ose()" /> method
ff10: 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20  .  Zero if this 
ff20: 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20  method is being 
ff30: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
ff40: 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  /// from the fin
ff50: 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20  alizer...       
ff60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
ff70: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
ff80: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
ff90: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
ffa0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
ffb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
ffc0: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
ffd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
fff0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10010 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
10020 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
10030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
10070 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
10080 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
10090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
100a0 20 20 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 0d 0a 20 20 20 20 20 20 20 20  //////..        
100d0 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
100f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10110 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
10120 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
10130 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
10140 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10180 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10190 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
101a0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
101b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
101c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
101d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
101e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
101f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10230 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
10240 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
10250 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e  .        /// Fin
10270 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65  alizes this obje
10280 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
10290 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
102a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53  ary>..        ~S
102b0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
102c0 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20  eCursor()..     
102d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
102e0 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
102f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
10300 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10310 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
10320 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
10330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10380 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
10390 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 49 6e  eNativeHandle In
103a0 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
103b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
103c0 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
103d0 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ce represents a 
103e0 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 70 72  native handle pr
103f0 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
10400 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
10410 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
10420 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10430 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
10440 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74  rface ISQLiteNat
10450 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
10460 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
10470 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
10480 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
10490 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a 20  handle value... 
104a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
104b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 49  mary>..        I
104c0 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64  ntPtr NativeHand
104d0 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  le { get; }..   
104e0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
104f0 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10540 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
10550 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
10560 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61  veModule Interfa
10570 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
10580 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
10590 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65  his interface re
105a0 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74 75  presents a virtu
105b0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
105c0 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20  ntation written 
105d0 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  in..    /// nati
105e0 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ve code...    //
105f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10600 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61    public interfa
10610 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  ce ISQLiteNative
10620 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Module..    {.. 
10630 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
10640 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
10650 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
10660 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
10670 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  d is called to c
10680 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e 73 74  reate a new inst
10690 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74 75 61  ance of a virtua
106a0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
106b0 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65   /// in response
106c0 20 74 6f 20 61 20 43 52 45 41 54 45 20 56 49 52   to a CREATE VIR
106d0 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
106e0 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70 61 72  ment. The db par
106f0 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20  ameter..        
10700 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74 65 72  /// is a pointer
10710 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 64   to the SQLite d
10720 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10730 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65 63 75  on that is execu
10740 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ting..        //
10750 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
10760 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
10770 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78 20 61  ment. The pAux a
10780 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 63  rgument is the c
10790 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  opy..        ///
107a0 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74 20 64   of the client d
107b0 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ata pointer that
107c0 20 77 61 73 20 74 68 65 20 66 6f 75 72 74 68 20   was the fourth 
107d0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0d  argument to the.
107e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
107f0 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
10800 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  le() or sqlite3_
10810 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
10820 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20 20  () call that..  
10830 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69 73 74        /// regist
10840 65 72 65 64 20 74 68 65 20 76 69 72 74 75 61 6c  ered the virtual
10850 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20 54   table module. T
10860 68 65 20 61 72 67 76 20 70 61 72 61 6d 65 74 65  he argv paramete
10870 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  r is an..       
10880 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20 61 72   /// array of ar
10890 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6e  gc pointers to n
108a0 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 73  ull terminated s
108b0 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69 72 73  trings. The firs
108c0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
108d0 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c 20  tring, argv[0], 
108e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
108f0 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67 20  he module being 
10900 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20  invoked. The..  
10910 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65        /// module
10920 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d   name is the nam
10930 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 74 68  e provided as th
10940 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
10950 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
10960 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
10970 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20 61 73  _module() and as
10980 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
10990 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   the USING claus
109a0 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
109b0 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
109c0 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
109d0 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e  ment that is run
109e0 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e 64  ning. The second
109f0 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
10a00 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65 20 6e  rgv[1], is the n
10a10 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
10a20 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
10a30 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62   new virtual tab
10a40 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
10a50 69 73 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  is being created
10a60 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e  . The database n
10a70 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20 66 6f  ame is "main" fo
10a80 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d 0a 20  r the primary.. 
10a90 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62         /// datab
10aa0 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22 20 66  ase, or "temp" f
10ab0 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  or TEMP database
10ac0 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 67 69  , or the name gi
10ad0 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20 20 20  ven at the..    
10ae0 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20 74      /// end of t
10af0 68 65 20 41 54 54 41 43 48 20 73 74 61 74 65 6d  he ATTACH statem
10b00 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68 65 64  ent for attached
10b10 20 64 61 74 61 62 61 73 65 73 2e 20 54 68 65 20   databases. The 
10b20 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20 20 2f  third..        /
10b30 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  // element of th
10b40 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b 32 5d  e array, argv[2]
10b50 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
10b60 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
10b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
10b80 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66 69 65  ble, as specifie
10b90 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
10ba0 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20 69 6e  TABLE keyword in
10bb0 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20 20 20   the CREATE..   
10bc0 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55 41 4c       /// VIRTUAL
10bd0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
10be0 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20 74 68  . If present, th
10bf0 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73 75 62  e fourth and sub
10c00 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20  sequent..       
10c10 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e 20   /// strings in 
10c20 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72 61 79  the argv[] array
10c30 20 72 65 70 6f 72 74 20 74 68 65 20 61 72 67 75   report the argu
10c40 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
10c50 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ule name..      
10c60 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52 45    /// in the CRE
10c70 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
10c80 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
10c90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10ca0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10cb0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
10cc0 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20 74 68  // The job of th
10cd0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74 6f 20  is method is to 
10ce0 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6e 65  construct the ne
10cf0 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
10d00 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
10d10 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65 33 5f  /// (an sqlite3_
10d20 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61 6e 64  vtab object) and
10d30 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
10d40 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70 56 54  r to it in *ppVT
10d50 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ab...        ///
10d60 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
10d70 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
10d80 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70 61 72        /// As par
10d90 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20 6f 66  t of the task of
10da0 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20   creating a new 
10db0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
10dc0 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a 20 20  ucture, this..  
10dd0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
10de0 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73 71 6c   must invoke sql
10df0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
10e00 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68 65 20  b() to tell the 
10e10 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
10e20 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 74       /// about t
10e30 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 64  he columns and d
10e40 61 74 61 74 79 70 65 73 20 69 6e 20 74 68 65 20  atatypes in the 
10e50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
10e60 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
10e70 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
10e80 76 74 61 62 28 29 20 41 50 49 20 68 61 73 20 74  vtab() API has t
10e90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f  he following pro
10ea0 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20  totype:..       
10eb0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
10ec0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
10ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
10ee0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
10ef0 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 65  / int sqlite3_de
10f00 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c 69 74  clare_vtab(sqlit
10f10 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
10f20 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62 6c 65  ar *zCreateTable
10f30 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  )..        /// <
10f40 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
10f50 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
10f60 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
10f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
10f80 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
10f90 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
10fa0 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20 62  re_vtab() must b
10fb0 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20  e the same..    
10fc0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
10fd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
10fe0 74 65 72 20 61 73 20 74 68 65 20 66 69 72 73 74  ter as the first
10ff0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
11000 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  is method...    
11010 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f      /// The seco
11020 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  nd argument to s
11030 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
11040 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a 20 20  tab() must a..  
11050 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d 74        /// zero-t
11060 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
11070 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74  string that cont
11080 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ains a well-form
11090 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20  ed CREATE..     
110a0 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74 61     /// TABLE sta
110b0 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  tement that defi
110c0 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nes the columns 
110d0 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
110e0 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  able and..      
110f0 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61 74 61    /// their data
11100 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61 6d 65   types. The name
11110 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
11120 20 74 68 69 73 20 43 52 45 41 54 45 20 54 41 42   this CREATE TAB
11130 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
11140 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 67 6e  statement is ign
11150 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61 6c 6c  ored, as are all
11160 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f 6e   constraints. On
11170 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ly the column na
11180 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  mes..        ///
11190 20 61 6e 64 20 64 61 74 61 74 79 70 65 73 20 6d   and datatypes m
111a0 61 74 74 65 72 2e 20 54 68 65 20 43 52 45 41 54  atter. The CREAT
111b0 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
111c0 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20 6e 6f  t string need no
111d0 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
111e0 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70 65 72  / be held in per
111f0 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e 20  sistent memory. 
11200 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  The string can b
11210 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e  e deallocated an
11220 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d/or..        //
11230 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f 6f 6e  / reused as soon
11240 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f   as the sqlite3_
11250 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 72  declare_vtab() r
11260 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0d  outine returns..
11270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11280 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11290 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
112a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
112b0 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
112c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
112d0 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
112e0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
112f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11300 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
11310 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11320 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20  "pAux">..       
11330 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
11340 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  l native pointer
11350 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20   value that was 
11360 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
11370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
11380 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
11390 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72  le(), sqlite3_cr
113a0 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
113b0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
113c0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
113d0 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
113e0 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  e() functions...
113f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
11400 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
11410 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
11420 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgc">..        /
11430 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
11440 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
11450 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
11460 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
11470 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
11480 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
11490 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
114a0 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
114b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
114c0 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75  y of string argu
114d0 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
114e0 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
114f0 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  BLE..        ///
11500 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
11510 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
11520 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
11530 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
11540 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
11550 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
11560 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
11570 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
11580 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e  o point to the n
11590 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ewly..        //
115a0 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65  / created native
115b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
115c0 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
115d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
115e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
115f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11600 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
11610 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
11620 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
11630 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
11640 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
11650 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..    
11660 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c      /// message,
11670 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c   with the underl
11680 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69  ying memory havi
11690 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  ng been obtained
116a0 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
116b0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
116c0 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e  alloc() function
116d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
116e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
116f0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
11700 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
11710 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
11720 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
11730 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
11740 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
11750 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65  teErrorCode xCre
11760 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
11770 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
11780 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
11790 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
117a0 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
117b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
117c0 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
117d0 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
117e0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
117f0 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
11800 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
11810 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
11820 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11860 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
11870 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
11880 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
11890 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
118a0 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
118b0 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72 79 20   method is very 
118c0 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72 65 61  similar to xCrea
118d0 74 65 2e 20 49 74 20 68 61 73 20 74 68 65 20 73  te. It has the s
118e0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
118f0 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20   parameters and 
11900 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e 65 77  constructs a new
11910 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
11920 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c 69 6b  ructure just lik
11930 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
11940 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74 20 6d  Create. And it m
11950 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20 73 71  ust also call sq
11960 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
11970 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65 61 74  ab() like xCreat
11980 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
11990 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
119a0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
119b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 66       /// The dif
119c0 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
119d0 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c 6c  xConnect is call
119e0 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20  ed to establish 
119f0 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f  a new..        /
11a00 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  // connection to
11a10 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76 69 72   an existing vir
11a20 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 72 65  tual table where
11a30 61 73 20 78 43 72 65 61 74 65 20 69 73 20 63 61  as xCreate is ca
11a40 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lled..        //
11a50 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  / to create a ne
11a60 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
11a70 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d 0a 20  from scratch... 
11a80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
11a90 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
11aa0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
11ab0 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74 65 20  /// The xCreate 
11ac0 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  and xConnect met
11ad0 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20 64 69  hods are only di
11ae0 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74 68 65  fferent when the
11af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
11b00 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
11b10 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62 61 63  some kind of bac
11b20 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20  king store that 
11b30 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
11b40 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
11b50 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
11b60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11b70 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 68  e is created. Th
11b80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
11b90 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 63 72  Create method cr
11ba0 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74 69 61  eates and initia
11bb0 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b 69 6e  lizes the backin
11bc0 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a 20 20  g store. The..  
11bd0 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65        /// xConne
11be0 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74 20 63  ct method just c
11bf0 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20 65 78  onnects to an ex
11c00 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67 20 73  isting backing s
11c10 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tore...        /
11c20 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
11c30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
11c40 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 61          /// As a
11c50 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69  n example, consi
11c60 64 65 72 20 61 20 76 69 72 74 75 61 6c 20 74 61  der a virtual ta
11c70 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
11c80 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  on that..       
11c90 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20 72 65   /// provides re
11ca0 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20 74  ad-only access t
11cb0 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d 61  o existing comma
11cc0 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c 75 65  -separated-value
11cd0 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20 20 20   (CSV)..        
11ce0 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69 73  /// files on dis
11cf0 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 62  k. There is no b
11d00 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61  acking store tha
11d10 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 63 72  t needs to be cr
11d20 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  eated..        /
11d30 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  // or initialize
11d40 64 20 66 6f 72 20 73 75 63 68 20 61 20 76 69 72  d for such a vir
11d50 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69 6e 63  tual table (sinc
11d60 65 20 74 68 65 20 43 53 56 20 66 69 6c 65 73 0d  e the CSV files.
11d70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 72  .        /// alr
11d80 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20 64 69  eady exist on di
11d90 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72 65 61  sk) so the xCrea
11da0 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20  te and xConnect 
11db0 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62 65 0d  methods will be.
11dc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65  .        /// ide
11dd0 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61 74 20  ntical for that 
11de0 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20 20  module...       
11df0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
11e00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
11e10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
11e20 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20 69 73  other example is
11e30 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11e40 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
11e50 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a 20 20   a full-text..  
11e60 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65 78 2e        /// index.
11e70 20 54 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   The xCreate met
11e80 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74 65 20  hod must create 
11e90 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 64  and initialize d
11ea0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
11eb0 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 68   structures to h
11ec0 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f 6e 61  old the dictiona
11ed0 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c  ry and posting l
11ee0 69 73 74 73 20 66 6f 72 20 74 68 61 74 20 69 6e  ists for that in
11ef0 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
11f00 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d  / The xConnect m
11f10 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20 6f 74  ethod, on the ot
11f20 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79 20 68  her hand, only h
11f30 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61 6e 64  as to locate and
11f40 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   use..        //
11f50 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 69  / an existing di
11f60 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f 73  ctionary and pos
11f70 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61 74 20  ting lists that 
11f80 77 65 72 65 20 63 72 65 61 74 65 64 20 62 79 20  were created by 
11f90 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  a..        /// p
11fa0 72 69 6f 72 20 78 43 72 65 61 74 65 20 63 61 6c  rior xCreate cal
11fb0 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  l...        /// 
11fc0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
11fd0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
11fe0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f       /// The xCo
11ff0 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d 75 73  nnect method mus
12000 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
12010 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75 63 63  OK if it is succ
12020 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20 20 20  essful in..     
12030 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e 67 20     /// creating 
12040 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
12050 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49 54 45  table, or SQLITE
12060 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69 73 20  _ERROR if it is 
12070 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
12080 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20   successful. If 
12090 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20  not successful, 
120a0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
120b0 20 73 74 72 75 63 74 75 72 65 20 6d 75 73 74 20   structure must 
120c0 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
120d0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 20 41   be allocated. A
120e0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
120f0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  may optionally b
12100 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 2a 70  e returned in *p
12110 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zErr..        //
12120 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73 66 75  / if unsuccessfu
12130 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  l. Space to hold
12140 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
12150 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  ge string must b
12160 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
12170 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67 20 61  llocated using a
12180 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 20  n SQLite memory 
12190 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74  allocation funct
121a0 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  ion like..      
121b0 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
121c0 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
121d0 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73 20 74  3_mprintf() as t
121e0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77  he SQLite core w
121f0 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
12200 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65 65   attempt to free
12210 20 74 68 65 20 73 70 61 63 65 20 75 73 69 6e 67   the space using
12220 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20   sqlite3_free() 
12230 61 66 74 65 72 20 74 68 65 20 65 72 72 6f 72 20  after the error 
12240 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  has..        ///
12250 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20 75   been reported u
12260 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61  p to the applica
12270 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
12280 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12290 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
122a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
122b0 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20  xConnect method 
122c0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
122d0 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
122e0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
122f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
12300 20 74 68 6f 75 67 68 20 74 68 65 20 78 43 72 65   though the xCre
12310 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74  ate and xConnect
12320 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74 68 65   pointers of the
12330 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
12340 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f 62 6a  lite3_module obj
12350 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f  ect may point to
12360 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69   the same functi
12370 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a  on the virtual..
12380 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c          /// tabl
12390 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64 20  e does not need 
123a0 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
123b0 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a 20 20  cking store...  
123c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
123d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
123e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
123f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12400 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20  me="pDb">..     
12410 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
12420 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
12430 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20  ction handle... 
12440 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
12450 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
12460 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
12470 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ux">..        //
12480 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e  / The original n
12490 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76 61  ative pointer va
124a0 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72 6f  lue that was pro
124b0 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
124c0 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
124d0 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
124e0 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ), sqlite3_creat
124f0 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72  e_module_v2() or
12500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
12510 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73  lite3_create_dis
12520 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29  posable_module()
12530 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
12540 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
12550 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12560 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
12570 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
12580 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
12590 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  guments from the
125a0 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
125b0 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
125c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
125d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
125e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
125f0 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
12600 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
12610 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  f string argumen
12620 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41  ts from the CREA
12630 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
12640 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
12650 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  atement...      
12660 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12670 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
12680 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
12690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
126a0 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
126b0 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
126c0 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70  be modified to p
126d0 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c  oint to the newl
126e0 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  y..        /// c
126f0 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73 71  reated native sq
12700 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
12710 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
12720 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
12730 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
12740 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45   <param name="pE
12750 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rror">..        
12760 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  /// Upon failure
12770 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
12780 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
12790 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  d to point to th
127a0 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
127b0 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77 69   /// message, wi
127c0 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  th the underlyin
127d0 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67 20  g memory having 
127e0 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72  been obtained fr
127f0 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
12800 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  /// sqlite3_mall
12810 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  oc() function...
12820 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
12830 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
12840 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
12850 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
12860 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
12870 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
12880 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
12890 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
128a0 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63  rrorCode xConnec
128b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
128c0 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
128d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
128e0 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
128f0 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
12900 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
12910 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
12920 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
12930 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
12940 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45     ref IntPtr pE
12950 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
12960 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
12970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
129c0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
129d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
129e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
129f0 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20 74 68  / SQLite uses th
12a00 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
12a10 68 6f 64 20 6f 66 20 61 20 76 69 72 74 75 61 6c  hod of a virtual
12a20 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 6f   table module to
12a30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
12a40 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
12a50 20 77 61 79 20 74 6f 20 61 63 63 65 73 73 20 74   way to access t
12a60 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12a70 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78  . The xBestIndex
12a80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
12a90 74 68 6f 64 20 68 61 73 20 61 20 70 72 6f 74 6f  thod has a proto
12aa0 74 79 70 65 20 6c 69 6b 65 20 74 68 69 73 3a 0d  type like this:.
12ab0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
12ac0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
12ad0 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
12ae0 20 20 2f 2f 2f 20 69 6e 74 20 28 2a 78 42 65 73    /// int (*xBes
12af0 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33 5f  tIndex)(sqlite3_
12b00 76 74 61 62 20 2a 70 56 54 61 62 2c 20 73 71 6c  vtab *pVTab, sql
12b10 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a  ite3_index_info*
12b20 29 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  );..        /// 
12b30 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
12b40 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
12b50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c       /// The SQL
12b60 69 74 65 20 63 6f 72 65 20 63 6f 6d 6d 75 6e 69  ite core communi
12b70 63 61 74 65 73 20 77 69 74 68 20 74 68 65 20 78  cates with the x
12b80 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
12b90 20 62 79 20 66 69 6c 6c 69 6e 67 0d 0a 20 20 20   by filling..   
12ba0 20 20 20 20 20 2f 2f 2f 20 69 6e 20 63 65 72 74       /// in cert
12bb0 61 69 6e 20 66 69 65 6c 64 73 20 6f 66 20 74 68  ain fields of th
12bc0 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
12bd0 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 61  info structure a
12be0 6e 64 20 70 61 73 73 69 6e 67 20 61 0d 0a 20 20  nd passing a..  
12bf0 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65        /// pointe
12c00 72 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74  r to that struct
12c10 75 72 65 20 69 6e 74 6f 20 78 42 65 73 74 49 6e  ure into xBestIn
12c20 64 65 78 20 61 73 20 74 68 65 20 73 65 63 6f 6e  dex as the secon
12c30 64 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20  d parameter...  
12c40 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
12c50 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
12c60 66 69 6c 6c 73 20 6f 75 74 20 6f 74 68 65 72 20  fills out other 
12c70 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20 73  fields of this s
12c80 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20  tructure..      
12c90 20 20 2f 2f 2f 20 77 68 69 63 68 20 66 6f 72 6d    /// which form
12ca0 73 20 74 68 65 20 72 65 70 6c 79 2e 20 54 68 65  s the reply. The
12cb0 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
12cc0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 6c 6f  nfo structure lo
12cd0 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  oks like..      
12ce0 20 20 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20 20 20    /// this:..   
12cf0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12d00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
12d10 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
12d20 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  /  struct sqlite
12d30 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d 0a  3_index_info {..
12d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f          ///    /
12d50 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20 20  * Inputs */..   
12d60 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
12d70 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e  t int nConstrain
12d80 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  t;   /* Number o
12d90 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
12da0 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20  nstraint */..   
12db0 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
12dc0 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  t struct sqlite3
12dd0 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
12de0 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t {..        ///
12df0 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75         int iColu
12e00 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
12e10 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68  Column on left-h
12e20 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20 20 20  and side of..   
12e30 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69        * constrai
12e60 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
12e70 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65  //       unsigne
12e80 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20 20 2f  d char op;     /
12e90 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65  * Constraint ope
12ea0 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20 20  rator */..      
12eb0 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
12ec0 67 6e 65 64 20 63 68 61 72 20 75 73 61 62 6c 65  gned char usable
12ed0 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69  ; /* True if thi
12ee0 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  s constraint is 
12ef0 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20 20  usable */..     
12f00 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74     ///       int
12f10 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20 20 20   iTermOffset;   
12f20 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74 65 72     /* Used inter
12f30 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e 64  nally - xBestInd
12f40 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  ex should..     
12f50 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f 0d      * ignore */.
12f80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
12f90 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72  } *const aConstr
12fa0 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62 6c  aint;    /* Tabl
12fb0 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61 75 73  e of WHERE claus
12fc0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
12fd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
12fe0 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64 65   const int nOrde
12ff0 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rBy;      /* Num
13000 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
13010 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a 20 20  the ORDER BY..  
13020 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73 65 20         * clause 
13050 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
13060 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
13070 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
13080 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20 20 20  derby {..       
13090 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
130a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
130b0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
130c0 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r */..        //
130d0 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /       unsigned
130e0 20 63 68 61 72 20 64 65 73 63 3b 20 20 20 2f 2a   char desc;   /*
130f0 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20   True for DESC. 
13100 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 20   False for ASC. 
13110 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
13120 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72 64     } *const aOrd
13130 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  erBy;       /* T
13140 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
13150 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  se */..        /
13160 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 73  //    /* Outputs
13170 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
13180 20 20 20 20 73 74 72 75 63 74 20 73 71 6c 69 74      struct sqlit
13190 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
131a0 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20 20  int_usage {..   
131b0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 69 6e       ///      in
131c0 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20 20 20  t argvIndex;    
131d0 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65 61 74       /* if great
131e0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63 6f  er than zero, co
131f0 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20 20 20  nstraint is..   
13200 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f 66 20        * part of 
13230 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 20  argv to xFilter 
13240 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
13250 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
13260 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20 44  ar omit;    /* D
13270 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73  o not code a tes
13280 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..    
13290 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e       * constrain
132c0 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t */..        //
132d0 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43  /    } *const aC
132e0 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 3b 0d  onstraintUsage;.
132f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
13300 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20 20 20  int idxNum;     
13310 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13320 65 72 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  er used to ident
13330 69 66 79 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  ify the index */
13340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
13350 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b 20 20   char *idxStr;  
13360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
13370 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f 62  ing, possibly ob
13380 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20 20  tained from..   
13390 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65 33 5f        * sqlite3_
133c0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20 20  malloc() */..   
133d0 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20       ///    int 
133e0 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74 72  needToFreeIdxStr
133f0 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69 64 78  ;    /* Free idx
13400 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65  Str using sqlite
13410 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20 20 20  3_free() if..   
13420 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a 2f 0d        * true */.
13450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
13460 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
13470 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  med;     /* True
13480 20 69 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c   if output is al
13490 72 65 61 64 79 20 6f 72 64 65 72 65 64 20 2a 2f  ready ordered */
134a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
134b0 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65   double estimate
134c0 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73 74  dCost;    /* Est
134d0 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75  imated cost of u
134e0 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  sing this index 
134f0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
13500 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   };..        ///
13510 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
13520 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
13530 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64 64        /// In add
13540 69 74 69 6f 6e 2c 20 74 68 65 72 65 20 61 72 65  ition, there are
13550 20 73 6f 6d 65 20 64 65 66 69 6e 65 64 20 63 6f   some defined co
13560 6e 73 74 61 6e 74 73 3a 0d 0a 20 20 20 20 20 20  nstants:..      
13570 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13580 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
13590 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
135a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
135b0 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
135c0 45 51 20 20 20 20 32 0d 0a 20 20 20 20 20 20 20  EQ    2..       
135d0 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
135e0 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
135f0 52 41 49 4e 54 5f 47 54 20 20 20 20 34 0d 0a 20  RAINT_GT    4.. 
13600 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66         ///  #def
13610 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  ine SQLITE_INDEX
13620 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 45 20 20  _CONSTRAINT_LE  
13630 20 20 38 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    8..        ///
13640 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
13650 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
13660 54 5f 4c 54 20 20 20 20 31 36 0d 0a 20 20 20 20  T_LT    16..    
13670 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65      ///  #define
13680 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
13690 4e 53 54 52 41 49 4e 54 5f 47 45 20 20 20 20 33  NSTRAINT_GE    3
136a0 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  2..        ///  
136b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
136c0 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
136d0 4d 41 54 43 48 20 36 34 0d 0a 20 20 20 20 20 20  MATCH 64..      
136e0 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
136f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13700 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
13710 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63  he SQLite core c
13720 61 6c 6c 73 20 74 68 65 20 78 42 65 73 74 49 6e  alls the xBestIn
13730 64 65 78 20 6d 65 74 68 6f 64 20 77 68 65 6e 20  dex method when 
13740 69 74 20 69 73 20 63 6f 6d 70 69 6c 69 6e 67 20  it is compiling 
13750 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71  a..        /// q
13760 75 65 72 79 20 74 68 61 74 20 69 6e 76 6f 6c 76  uery that involv
13770 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
13780 6c 65 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  le. In other wor
13790 64 73 2c 20 53 51 4c 69 74 65 20 63 61 6c 6c 73  ds, SQLite calls
137a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
137b0 69 73 20 6d 65 74 68 6f 64 20 77 68 65 6e 20 69  is method when i
137c0 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 73 71 6c  t is running sql
137d0 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
137e0 72 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  r the equivalent
137f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42  ...        /// B
13800 79 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d  y calling this m
13810 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74  ethod, the SQLit
13820 65 20 63 6f 72 65 20 69 73 20 73 61 79 69 6e 67  e core is saying
13830 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d   to the virtual.
13840 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
13850 6c 65 20 74 68 61 74 20 69 74 20 6e 65 65 64 73  le that it needs
13860 20 74 6f 20 61 63 63 65 73 73 20 73 6f 6d 65 20   to access some 
13870 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 72 6f  subset of the ro
13880 77 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ws in the..     
13890 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
138a0 61 62 6c 65 20 61 6e 64 20 69 74 20 77 61 6e 74  able and it want
138b0 73 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 6d 6f  s to know the mo
138c0 73 74 20 65 66 66 69 63 69 65 6e 74 20 77 61 79  st efficient way
138d0 20 74 6f 20 64 6f 0d 0a 20 20 20 20 20 20 20 20   to do..        
138e0 2f 2f 2f 20 74 68 61 74 20 61 63 63 65 73 73 2e  /// that access.
138f0 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   The xBestIndex 
13900 6d 65 74 68 6f 64 20 72 65 70 6c 69 65 73 20 77  method replies w
13910 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ith information 
13920 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  that..        //
13930 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  / the SQLite cor
13940 65 20 63 61 6e 20 74 68 65 6e 20 75 73 65 20 74  e can then use t
13950 6f 20 63 6f 6e 64 75 63 74 20 61 6e 20 65 66 66  o conduct an eff
13960 69 63 69 65 6e 74 20 73 65 61 72 63 68 20 6f 66  icient search of
13970 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
13980 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  / virtual table.
13990 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
139a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
139b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
139c0 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f 6d     /// While com
139d0 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65 20  piling a single 
139e0 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65 20 53  SQL query, the S
139f0 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74  QLite core might
13a00 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
13a10 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75  // xBestIndex mu
13a20 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77 69 74  ltiple times wit
13a30 68 20 64 69 66 66 65 72 65 6e 74 20 73 65 74 74  h different sett
13a40 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  ings in..       
13a50 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
13a60 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51 4c  ex_info. The SQL
13a70 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 68  ite core will th
13a80 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d 0a 20  en select the.. 
13a90 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69         /// combi
13aa0 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70 70 65  nation that appe
13ab0 61 72 73 20 74 6f 20 67 69 76 65 20 74 68 65 20  ars to give the 
13ac0 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
13ad0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
13ae0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
13af0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
13b00 20 20 20 20 2f 2f 2f 20 42 65 66 6f 72 65 20 63      /// Before c
13b10 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68  alling this meth
13b20 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  od, the SQLite c
13b30 6f 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  ore initializes 
13b40 61 6e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  an instance..   
13b50 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
13b60 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
13b70 66 6f 20 73 74 72 75 63 74 75 72 65 20 77 69 74  fo structure wit
13b80 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
13b90 6f 75 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  out the..       
13ba0 20 2f 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20   /// query that 
13bb0 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  it is currently 
13bc0 74 72 79 69 6e 67 20 74 6f 20 70 72 6f 63 65 73  trying to proces
13bd0 73 2e 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  s. This informat
13be0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ion..        ///
13bf0 20 64 65 72 69 76 65 73 20 6d 61 69 6e 6c 79 20   derives mainly 
13c00 66 72 6f 6d 20 74 68 65 20 57 48 45 52 45 20 63  from the WHERE c
13c10 6c 61 75 73 65 20 61 6e 64 20 4f 52 44 45 52 20  lause and ORDER 
13c20 42 59 20 6f 72 20 47 52 4f 55 50 20 42 59 0d 0a  BY or GROUP BY..
13c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 75          /// clau
13c40 73 65 73 20 6f 66 20 74 68 65 20 71 75 65 72 79  ses of the query
13c50 2c 20 62 75 74 20 61 6c 73 6f 20 66 72 6f 6d 20  , but also from 
13c60 61 6e 79 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  any ON or USING 
13c70 63 6c 61 75 73 65 73 20 69 66 20 74 68 65 0d 0a  clauses if the..
13c80 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72          /// quer
13c90 79 20 69 73 20 61 20 6a 6f 69 6e 2e 20 54 68 65  y is a join. The
13ca0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
13cb0 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
13cc0 65 20 70 72 6f 76 69 64 65 73 20 74 6f 0d 0a 20  e provides to.. 
13cd0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78         /// the x
13ce0 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
13cf0 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
13d00 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
13d10 63 74 75 72 65 20 74 68 61 74 20 69 73 0d 0a 20  cture that is.. 
13d20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 72 6b 65         /// marke
13d30 64 20 61 73 20 22 49 6e 70 75 74 73 22 2e 20 54  d as "Inputs". T
13d40 68 65 20 22 4f 75 74 70 75 74 73 22 20 73 65 63  he "Outputs" sec
13d50 74 69 6f 6e 20 69 73 20 69 6e 69 74 69 61 6c 69  tion is initiali
13d60 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a 20 20  zed to zero...  
13d70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
13d80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13d90 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
13da0 2f 2f 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  // The informati
13db0 6f 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  on in the sqlite
13dc0 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
13dd0 75 63 74 75 72 65 20 69 73 20 65 70 68 65 6d 65  ucture is epheme
13de0 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ral..        ///
13df0 20 61 6e 64 20 6d 61 79 20 62 65 20 6f 76 65 72   and may be over
13e00 77 72 69 74 74 65 6e 20 6f 72 20 64 65 61 6c 6c  written or deall
13e10 6f 63 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  ocated as soon a
13e20 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  s the xBestIndex
13e30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
13e40 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 20 49 66  thod returns. If
13e50 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
13e60 6d 65 74 68 6f 64 20 6e 65 65 64 73 20 74 6f 20  method needs to 
13e70 72 65 6d 65 6d 62 65 72 20 61 6e 79 20 70 61 72  remember any par
13e80 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  t..        /// o
13e90 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
13ea0 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
13eb0 72 65 2c 20 69 74 20 73 68 6f 75 6c 64 20 6d 61  re, it should ma
13ec0 6b 65 20 61 20 63 6f 70 79 2e 20 43 61 72 65 0d  ke a copy. Care.
13ed0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73  .        /// mus
13ee0 74 20 62 65 20 74 61 6b 65 20 74 6f 20 73 74 6f  t be take to sto
13ef0 72 65 20 74 68 65 20 63 6f 70 79 20 69 6e 20 61  re the copy in a
13f00 20 70 6c 61 63 65 20 77 68 65 72 65 20 69 74 20   place where it 
13f10 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
13f20 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63 61 74 65 64   /// deallocated
13f30 2c 20 73 75 63 68 20 61 73 20 69 6e 20 74 68 65  , such as in the
13f40 20 69 64 78 53 74 72 20 66 69 65 6c 64 20 77 69   idxStr field wi
13f50 74 68 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78  th needToFreeIdx
13f60 53 74 72 20 73 65 74 0d 0a 20 20 20 20 20 20 20  Str set..       
13f70 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20 20 20   /// to 1...    
13f80 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
13f90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
13fa0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
13fb0 20 4e 6f 74 65 20 74 68 61 74 20 78 42 65 73 74   Note that xBest
13fc0 49 6e 64 65 78 20 77 69 6c 6c 20 61 6c 77 61 79  Index will alway
13fd0 73 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f  s be called befo
13fe0 72 65 20 78 46 69 6c 74 65 72 2c 20 73 69 6e 63  re xFilter, sinc
13ff0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
14000 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  he idxNum and id
14010 78 53 74 72 20 6f 75 74 70 75 74 73 20 66 72 6f  xStr outputs fro
14020 6d 20 78 42 65 73 74 49 6e 64 65 78 20 61 72 65  m xBestIndex are
14030 20 72 65 71 75 69 72 65 64 20 69 6e 70 75 74 73   required inputs
14040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
14050 20 78 46 69 6c 74 65 72 2e 20 48 6f 77 65 76 65   xFilter. Howeve
14060 72 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 67  r, there is no g
14070 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 78 46  uarantee that xF
14080 69 6c 74 65 72 20 77 69 6c 6c 20 62 65 0d 0a 20  ilter will be.. 
14090 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65         /// calle
140a0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
140b0 63 63 65 73 73 66 75 6c 20 78 42 65 73 74 49 6e  ccessful xBestIn
140c0 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
140d0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
140e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
140f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
14100 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
14110 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
14120 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
14130 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
14140 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
14150 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14160 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
14170 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
14180 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 31 20 49 6e      /// 2.3.1 In
14190 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  puts..        //
141a0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
141b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
141c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
141d0 61 69 6e 20 74 68 69 6e 67 20 74 68 61 74 20 74  ain thing that t
141e0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69  he SQLite core i
141f0 73 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d 6d  s trying to comm
14200 75 6e 69 63 61 74 65 20 74 6f 20 74 68 65 0d 0a  unicate to the..
14210 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
14220 75 61 6c 20 74 61 62 6c 65 20 69 73 20 74 68 65  ual table is the
14230 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
14240 74 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  t are available 
14250 74 6f 20 6c 69 6d 69 74 20 74 68 65 0d 0a 20 20  to limit the..  
14260 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
14270 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 6e 65   of rows that ne
14280 65 64 20 74 6f 20 62 65 20 73 65 61 72 63 68 65  ed to be searche
14290 64 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  d. The aConstrai
142a0 6e 74 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20  nt[] array..    
142b0 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73      /// contains
142c0 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
142d0 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ach constraint. 
142e0 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 65 78  There will be ex
142f0 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  actly..        /
14300 2f 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 65  // nConstraint e
14310 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 61  ntries in that a
14320 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rray...        /
14330 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
14340 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
14350 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68          /// Each
14360 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69 6c 6c   constraint will
14370 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
14380 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48 45   term in the WHE
14390 52 45 20 63 6c 61 75 73 65 20 6f 72 20 69 6e 0d  RE clause or in.
143a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20 55  .        /// a U
143b0 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
143c0 65 20 74 68 61 74 20 69 73 20 6f 66 20 74 68 65  e that is of the
143d0 20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 2f   form..        /
143e0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
143f0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
14400 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
14410 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d 0a  column OP EXPR..
14420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
14430 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
14440 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
14450 20 2f 2f 2f 20 57 68 65 72 65 20 22 63 6f 6c 75   /// Where "colu
14460 6d 6e 22 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  mn" is a column 
14470 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
14480 61 62 6c 65 2c 20 4f 50 20 69 73 20 61 6e 20 6f  able, OP is an o
14490 70 65 72 61 74 6f 72 0d 0a 20 20 20 20 20 20 20  perator..       
144a0 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d 22 20 6f 72   /// like "=" or
144b0 20 22 26 6c 74 3b 22 2c 20 61 6e 64 20 45 58 50   "&lt;", and EXP
144c0 52 20 69 73 20 61 6e 20 61 72 62 69 74 72 61 72  R is an arbitrar
144d0 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 53 6f  y expression. So
144e0 2c 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  , for..        /
144f0 2f 2f 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74  // example, if t
14500 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
14510 63 6f 6e 74 61 69 6e 65 64 20 61 20 74 65 72 6d  contained a term
14520 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20   like this:..   
14530 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
14550 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
14560 2f 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 35  /          a = 5
14570 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14580 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
14590 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
145a0 20 20 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65 20     /// Then one 
145b0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
145c0 74 73 20 77 6f 75 6c 64 20 62 65 20 6f 6e 20 74  ts would be on t
145d0 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e 20 77 69  he "a" column wi
145e0 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
145f0 6f 70 65 72 61 74 6f 72 20 22 3d 22 20 61 6e 64  operator "=" and
14600 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
14610 66 20 22 35 22 2e 20 43 6f 6e 73 74 72 61 69 6e  f "5". Constrain
14620 74 73 20 6e 65 65 64 20 6e 6f 74 20 68 61 76 65  ts need not have
14630 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
14640 6c 69 74 65 72 61 6c 20 72 65 70 72 65 73 65 6e  literal represen
14650 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  tation of the WH
14660 45 52 45 20 63 6c 61 75 73 65 2e 20 54 68 65 20  ERE clause. The 
14670 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 0d  query optimizer.
14680 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 69 67  .        /// mig
14690 68 74 20 6d 61 6b 65 20 74 72 61 6e 73 66 6f 72  ht make transfor
146a0 6d 61 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 57  mations to the W
146b0 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e 20 6f  HERE clause in o
146c0 72 64 65 72 20 74 6f 20 65 78 74 72 61 63 74 0d  rder to extract.
146d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 20  .        /// as 
146e0 6d 61 6e 79 20 63 6f 6e 73 74 72 61 69 6e 74 73  many constraints
146f0 20 61 73 20 69 74 20 63 61 6e 2e 20 53 6f 2c 20   as it can. So, 
14700 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  for example, if 
14710 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
14720 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
14730 6e 74 61 69 6e 65 64 20 73 6f 6d 65 74 68 69 6e  ntained somethin
14740 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20  g like this:..  
14750 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
14760 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
14770 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
14780 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 42 45  //          x BE
14790 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31 30 30  TWEEN 10 AND 100
147a0 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a 20   AND 999&gt;y.. 
147b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
147c0 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
147d0 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
147e0 2f 2f 2f 20 54 68 65 20 71 75 65 72 79 20 6f 70  /// The query op
147f0 74 69 6d 69 7a 65 72 20 6d 69 67 68 74 20 74 72  timizer might tr
14800 61 6e 73 6c 61 74 65 20 74 68 69 73 20 69 6e 74  anslate this int
14810 6f 20 74 68 72 65 65 20 73 65 70 61 72 61 74 65  o three separate
14820 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
14830 6e 73 74 72 61 69 6e 74 73 3a 0d 0a 20 20 20 20  nstraints:..    
14840 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
14850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
14860 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
14870 20 20 20 20 20 20 20 20 20 20 78 20 26 67 74 3b            x &gt;
14880 3d 20 31 30 0d 0a 20 20 20 20 20 20 20 20 2f 2f  = 10..        //
14890 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 6c 74  /          x &lt
148a0 3b 3d 20 31 30 30 0d 0a 20 20 20 20 20 20 20 20  ;= 100..        
148b0 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 79 20 26  ///          y &
148c0 6c 74 3b 20 39 39 39 0d 0a 20 20 20 20 20 20 20  lt; 999..       
148d0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
148e0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
148f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f  ..        /// Fo
14900 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  r each constrain
14910 74 2c 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  t, the aConstrai
14920 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  nt[].iColumn fie
14930 6c 64 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20  ld indicates..  
14940 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
14950 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 6f  column appears o
14960 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  n the left-hand 
14970 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  side of the cons
14980 74 72 61 69 6e 74 2e 20 54 68 65 0d 0a 20 20 20  traint. The..   
14990 20 20 20 20 20 2f 2f 2f 20 66 69 72 73 74 20 63       /// first c
149a0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 76 69 72  olumn of the vir
149b0 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6f  tual table is co
149c0 6c 75 6d 6e 20 30 2e 20 54 68 65 20 72 6f 77 69  lumn 0. The rowi
149d0 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  d of the..      
149e0 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
149f0 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 2d 31  ble is column -1
14a00 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  . The aConstrain
14a10 74 5b 5d 2e 6f 70 20 66 69 65 6c 64 20 69 6e 64  t[].op field ind
14a20 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20  icates..        
14a30 2f 2f 2f 20 77 68 69 63 68 20 6f 70 65 72 61 74  /// which operat
14a40 6f 72 20 69 73 20 75 73 65 64 2e 20 54 68 65 20  or is used. The 
14a50 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
14a60 53 54 52 41 49 4e 54 5f 2a 20 63 6f 6e 73 74 61  STRAINT_* consta
14a70 6e 74 73 20 6d 61 70 0d 0a 20 20 20 20 20 20 20  nts map..       
14a80 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 63 6f 6e   /// integer con
14a90 73 74 61 6e 74 73 20 69 6e 74 6f 20 6f 70 65 72  stants into oper
14aa0 61 74 6f 72 20 76 61 6c 75 65 73 2e 20 43 6f 6c  ator values. Col
14ab0 75 6d 6e 73 20 6f 63 63 75 72 20 69 6e 20 74 68  umns occur in th
14ac0 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20  e order..       
14ad0 20 2f 2f 2f 20 74 68 65 79 20 77 65 72 65 20 64   /// they were d
14ae0 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 63 61  efined by the ca
14af0 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65  ll to sqlite3_de
14b00 63 6c 61 72 65 5f 76 74 61 62 28 29 20 69 6e 20  clare_vtab() in 
14b10 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
14b20 20 78 43 72 65 61 74 65 20 6f 72 20 78 43 6f 6e   xCreate or xCon
14b30 6e 65 63 74 20 6d 65 74 68 6f 64 2e 20 48 69 64  nect method. Hid
14b40 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  den columns are 
14b50 63 6f 75 6e 74 65 64 20 77 68 65 6e 0d 0a 20 20  counted when..  
14b60 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d        /// determ
14b70 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  ining the column
14b80 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
14b90 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
14ba0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
14bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
14bc0 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20  e aConstraint[] 
14bd0 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 69  array contains i
14be0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
14bf0 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
14c00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
14c10 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20  at apply to the 
14c20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 42  virtual table. B
14c30 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 63  ut some of the c
14c40 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67 68 74  onstraints might
14c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f  ..        /// no
14c60 74 20 62 65 20 75 73 61 62 6c 65 20 62 65 63 61  t be usable beca
14c70 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20 74  use of the way t
14c80 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65 72 65  ables are ordere
14c90 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68 65  d in a join. The
14ca0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42  ..        /// xB
14cb0 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
14cc0 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20 6f  must therefore o
14cd0 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63 6f 6e  nly consider con
14ce0 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d 0a 20  straints that.. 
14cf0 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65 20         /// have 
14d00 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  an aConstraint[]
14d10 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77 68 69  .usable flag whi
14d20 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20 20 20  ch is true...   
14d30 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14d50 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14d60 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  / In addition to
14d70 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
14d80 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 20 53  nstraints, the S
14d90 51 4c 69 74 65 20 63 6f 72 65 20 61 6c 73 6f 20  QLite core also 
14da0 74 65 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f  tells..        /
14db0 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  // the xBestInde
14dc0 78 20 6d 65 74 68 6f 64 20 61 62 6f 75 74 20 74  x method about t
14dd0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
14de0 73 65 2e 20 28 49 6e 20 61 6e 20 61 67 67 72 65  se. (In an aggre
14df0 67 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gate..        //
14e00 2f 20 71 75 65 72 79 2c 20 74 68 65 20 53 51 4c  / query, the SQL
14e10 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74 20 70  ite core might p
14e20 75 74 20 69 6e 20 47 52 4f 55 50 20 42 59 20 63  ut in GROUP BY c
14e30 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
14e40 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n in..        //
14e50 2f 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 4f  / place of the O
14e60 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
14e70 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 62 75 74 20  nformation, but 
14e80 74 68 69 73 20 66 61 63 74 20 73 68 6f 75 6c 64  this fact should
14e90 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f   not..        //
14ea0 2f 20 6d 61 6b 65 20 61 6e 79 20 64 69 66 66 65  / make any diffe
14eb0 72 65 6e 63 65 20 74 6f 20 74 68 65 20 78 42 65  rence to the xBe
14ec0 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 2e 29  stIndex method.)
14ed0 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
14ee0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
14ef0 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  / ORDER BY claus
14f00 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
14f10 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
14f20 6c 65 2c 20 74 68 65 6e 20 6e 4f 72 64 65 72 42  le, then nOrderB
14f30 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  y..        /// w
14f40 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65  ill be the numbe
14f50 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74 68  r of terms in th
14f60 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
14f70 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20  e and the..     
14f80 20 20 20 2f 2f 2f 20 61 4f 72 64 65 72 42 79 5b     /// aOrderBy[
14f90 5d 20 61 72 72 61 79 20 77 69 6c 6c 20 69 64 65  ] array will ide
14fa0 6e 74 69 66 79 20 74 68 65 20 63 6f 6c 75 6d 6e  ntify the column
14fb0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 69   for each term i
14fc0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
14fd0 2f 2f 20 6f 72 64 65 72 20 62 79 20 63 6c 61 75  // order by clau
14fe0 73 65 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  se and whether o
14ff0 72 20 6e 6f 74 20 74 68 61 74 20 63 6f 6c 75 6d  r not that colum
15000 6e 20 69 73 20 41 53 43 20 6f 72 20 44 45 53 43  n is ASC or DESC
15010 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15020 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15030 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15040 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 32 20 4f 75      /// 2.3.2 Ou
15050 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tputs..        /
15060 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
15070 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
15080 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 69 76 65          /// Give
15090 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e 66  n all of the inf
150a0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c 20  ormation above, 
150b0 74 68 65 20 6a 6f 62 20 6f 66 20 74 68 65 20 78  the job of the x
150c0 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20  BestIndex..     
150d0 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 74     /// method it
150e0 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 74   to figure out t
150f0 68 65 20 62 65 73 74 20 77 61 79 20 74 6f 20 73  he best way to s
15100 65 61 72 63 68 20 74 68 65 20 76 69 72 74 75 61  earch the virtua
15110 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
15120 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
15130 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15140 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15150 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
15160 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65 20 69  thod fills the i
15170 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72  dxNum and idxStr
15180 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a 20 20   fields with..  
15190 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d        /// inform
151a0 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d 6d 75  ation that commu
151b0 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64 65 78  nicates an index
151c0 69 6e 67 20 73 74 72 61 74 65 67 79 20 74 6f 20  ing strategy to 
151d0 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20 20 20  the xFilter..   
151e0 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
151f0 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
15200 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   in idxNum and i
15210 64 78 53 74 72 20 69 73 20 61 72 62 69 74 72 61  dxStr is arbitra
15220 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a 20 20  ry as far as..  
15230 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51        /// the SQ
15240 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63 6f 6e  Lite core is con
15250 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51 4c 69  cerned. The SQLi
15260 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63 6f 70  te core just cop
15270 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ies the..       
15280 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   /// information
15290 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
152a0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
152b0 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65 61 6e  Any desired mean
152c0 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  ing can..       
152d0 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e 65 64   /// be assigned
152e0 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   to idxNum and i
152f0 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20 61 73  dxStr as long as
15300 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e 64 20   xBestIndex and 
15310 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20  xFilter..       
15320 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20 77 68   /// agree on wh
15330 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20  at that meaning 
15340 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is...        ///
15350 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15360 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15370 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 64        /// The id
15380 78 53 74 72 20 76 61 6c 75 65 20 6d 61 79 20 62  xStr value may b
15390 65 20 61 20 73 74 72 69 6e 67 20 6f 62 74 61 69  e a string obtai
153a0 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c 69  ned from an SQLi
153b0 74 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  te memory..     
153c0 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f     /// allocatio
153d0 6e 20 66 75 6e 63 74 69 6f 6e 20 73 75 63 68 20  n function such 
153e0 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  as sqlite3_mprin
153f0 74 66 28 29 2e 20 49 66 20 74 68 69 73 20 69 73  tf(). If this is
15400 20 74 68 65 20 63 61 73 65 2c 0d 0a 20 20 20 20   the case,..    
15410 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 74 68 65      /// then the
15420 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74   needToFreeIdxSt
15430 72 20 66 6c 61 67 20 6d 75 73 74 20 62 65 20 73  r flag must be s
15440 65 74 20 74 6f 20 74 72 75 65 20 73 6f 20 74 68  et to true so th
15450 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  at the..        
15460 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
15470 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 61 6c  will know to cal
15480 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29  l sqlite3_free()
15490 20 6f 6e 20 74 68 61 74 20 73 74 72 69 6e 67 20   on that string 
154a0 77 68 65 6e 20 69 74 0d 0a 20 20 20 20 20 20 20  when it..       
154b0 20 2f 2f 2f 20 68 61 73 20 66 69 6e 69 73 68 65   /// has finishe
154c0 64 20 77 69 74 68 20 69 74 2c 20 61 6e 64 20 74  d with it, and t
154d0 68 75 73 20 61 76 6f 69 64 20 61 20 6d 65 6d 6f  hus avoid a memo
154e0 72 79 20 6c 65 61 6b 2e 0d 0a 20 20 20 20 20 20  ry leak...      
154f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
15500 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
15520 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
15530 62 6c 65 20 77 69 6c 6c 20 6f 75 74 70 75 74 20  ble will output 
15540 72 6f 77 73 20 69 6e 20 74 68 65 20 6f 72 64 65  rows in the orde
15550 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
15560 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
15570 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
15580 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 42   then the orderB
15590 79 43 6f 6e 73 75 6d 65 64 20 66 6c 61 67 20 6d  yConsumed flag m
155a0 61 79 20 62 65 20 73 65 74 20 74 6f 20 74 72 75  ay be set to tru
155b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
155c0 49 66 20 74 68 65 20 6f 75 74 70 75 74 20 69 73  If the output is
155d0 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c   not automatical
155e0 6c 79 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63  ly in the correc
155f0 74 20 6f 72 64 65 72 20 74 68 65 6e 0d 0a 20 20  t order then..  
15600 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72 42        /// orderB
15610 79 43 6f 6e 73 75 6d 65 64 20 6d 75 73 74 20 62  yConsumed must b
15620 65 20 6c 65 66 74 20 69 6e 20 69 74 73 20 64 65  e left in its de
15630 66 61 75 6c 74 20 66 61 6c 73 65 20 73 65 74 74  fault false sett
15640 69 6e 67 2e 20 54 68 69 73 0d 0a 20 20 20 20 20  ing. This..     
15650 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e 64 69     /// will indi
15660 63 61 74 65 20 74 6f 20 74 68 65 20 53 51 4c 69  cate to the SQLi
15670 74 65 20 63 6f 72 65 20 74 68 61 74 20 69 74 20  te core that it 
15680 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 6f 20  will need to do 
15690 61 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20  a separate..    
156a0 20 20 20 20 2f 2f 2f 20 73 6f 72 74 69 6e 67 20      /// sorting 
156b0 70 61 73 73 20 6f 76 65 72 20 74 68 65 20 64 61  pass over the da
156c0 74 61 20 61 66 74 65 72 20 69 74 20 63 6f 6d 65  ta after it come
156d0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 76 69 72  s out of the vir
156e0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
156f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
15700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15710 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15720 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65 64 43  / The estimatedC
15730 6f 73 74 20 66 69 65 6c 64 20 73 68 6f 75 6c 64  ost field should
15740 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 65   be set to the e
15750 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
15760 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
15770 64 69 73 6b 20 61 63 63 65 73 73 20 6f 70 65 72  disk access oper
15780 61 74 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20  ations required 
15790 74 6f 20 65 78 65 63 75 74 65 20 74 68 69 73 20  to execute this 
157a0 71 75 65 72 79 20 61 67 61 69 6e 73 74 20 74 68  query against th
157b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
157c0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68  irtual table. Th
157d0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
157e0 6c 6c 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78 42  ll often call xB
157f0 65 73 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c  estIndex multipl
15800 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
15810 69 6d 65 73 20 77 69 74 68 20 64 69 66 66 65 72  imes with differ
15820 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  ent constraints,
15830 20 6f 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65   obtain multiple
15840 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 2c   cost estimates,
15850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
15860 65 6e 20 63 68 6f 6f 73 65 20 74 68 65 20 71 75  en choose the qu
15870 65 72 79 20 70 6c 61 6e 20 74 68 61 74 20 67 69  ery plan that gi
15880 76 65 73 20 74 68 65 20 6c 6f 77 65 73 74 20 65  ves the lowest e
15890 73 74 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20 20  stimate...      
158a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
158b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
158c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
158d0 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73  he aConstraintUs
158e0 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74  age[] array cont
158f0 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  ains one element
15900 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
15910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43  ..        /// nC
15920 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72  onstraint constr
15930 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69 6e 70  aints in the inp
15940 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  uts section of t
15950 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
15960 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
15970 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  fo structure. Th
15980 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  e aConstraintUsa
15990 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20 75 73  ge[] array is us
159a0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
159b0 62 79 20 78 42 65 73 74 49 6e 64 65 78 20 74 6f  by xBestIndex to
159c0 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65 20 68   tell the core h
159d0 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67 20 74  ow it is using t
159e0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  he constraints..
159f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
15a00 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
15a10 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
15a20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49    /// The xBestI
15a30 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 61 79 20  ndex method may 
15a40 73 65 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  set aConstraintU
15a50 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78  sage[].argvIndex
15a60 20 65 6e 74 72 69 65 73 0d 0a 20 20 20 20 20 20   entries..      
15a70 20 20 2f 2f 2f 20 74 6f 20 76 61 6c 75 65 73 20    /// to values 
15a80 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 6e 65  greater than one
15a90 2e 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 65 6e  . Exactly one en
15aa0 74 72 79 20 73 68 6f 75 6c 64 20 62 65 20 73 65  try should be se
15ab0 74 20 74 6f 20 31 2c 0d 0a 20 20 20 20 20 20 20  t to 1,..       
15ac0 20 2f 2f 2f 20 61 6e 6f 74 68 65 72 20 74 6f 20   /// another to 
15ad0 32 2c 20 61 6e 6f 74 68 65 72 20 74 6f 20 33 2c  2, another to 3,
15ae0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 75 70   and so forth up
15af0 20 74 6f 20 61 73 20 6d 61 6e 79 20 6f 72 20 61   to as many or a
15b00 73 20 66 65 77 20 61 73 0d 0a 20 20 20 20 20 20  s few as..      
15b10 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49    /// the xBestI
15b20 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 61 6e 74  ndex method want
15b30 73 2e 20 54 68 65 20 45 58 50 52 20 6f 66 20 74  s. The EXPR of t
15b40 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
15b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
15b60 6e 73 74 72 61 69 6e 74 73 20 77 69 6c 6c 20 74  nstraints will t
15b70 68 65 6e 20 62 65 20 70 61 73 73 65 64 20 69 6e  hen be passed in
15b80 20 61 73 20 74 68 65 20 61 72 67 76 5b 5d 20 70   as the argv[] p
15b90 61 72 61 6d 65 74 65 72 73 20 74 6f 0d 0a 20 20  arameters to..  
15ba0 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
15bb0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
15bc0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15bd0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15be0 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 78 61       /// For exa
15bf0 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 61 43 6f  mple, if the aCo
15c00 6e 73 74 72 61 69 6e 74 5b 33 5d 2e 61 72 67 76  nstraint[3].argv
15c10 49 6e 64 65 78 20 69 73 20 73 65 74 20 74 6f 20  Index is set to 
15c20 31 2c 20 74 68 65 6e 20 77 68 65 6e 0d 0a 20 20  1, then when..  
15c30 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
15c40 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  r is called, the
15c50 20 61 72 67 76 5b 30 5d 20 70 61 73 73 65 64 20   argv[0] passed 
15c60 74 6f 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20  to xFilter will 
15c70 68 61 76 65 20 74 68 65 20 45 58 50 52 0d 0a 20  have the EXPR.. 
15c80 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
15c90 20 6f 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61   of the aConstra
15ca0 69 6e 74 5b 33 5d 20 63 6f 6e 73 74 72 61 69 6e  int[3] constrain
15cb0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
15cc0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15cd0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15ce0 20 20 20 20 20 2f 2f 2f 20 42 79 20 64 65 66 61       /// By defa
15cf0 75 6c 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20  ult, the SQLite 
15d00 63 6f 72 65 20 64 6f 75 62 6c 65 20 63 68 65 63  core double chec
15d10 6b 73 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e  ks all constrain
15d20 74 73 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20 20  ts on each..    
15d30 20 20 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20 74      /// row of t
15d40 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15d50 20 74 68 61 74 20 69 74 20 72 65 63 65 69 76 65   that it receive
15d60 73 2e 20 49 66 20 73 75 63 68 20 61 20 63 68 65  s. If such a che
15d70 63 6b 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  ck is..        /
15d80 2f 2f 20 72 65 64 75 6e 64 61 6e 74 2c 20 74 68  // redundant, th
15d90 65 20 78 42 65 73 74 46 69 6c 74 65 72 20 6d 65  e xBestFilter me
15da0 74 68 6f 64 20 63 61 6e 20 73 75 70 70 72 65 73  thod can suppres
15db0 73 20 74 68 61 74 20 64 6f 75 62 6c 65 2d 63 68  s that double-ch
15dc0 65 63 6b 20 62 79 0d 0a 20 20 20 20 20 20 20 20  eck by..        
15dd0 2f 2f 2f 20 73 65 74 74 69 6e 67 20 61 43 6f 6e  /// setting aCon
15de0 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 6f  straintUsage[].o
15df0 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mit...        //
15e00 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
15e10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15e20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15e30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
15e40 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
15e50 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
15e60 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
15e70 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
15e80 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
15e90 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15ea0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15eb0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65  aram name="pInde
15ec0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
15ed0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
15ee0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
15ef0 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
15f00 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
15f10 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15f20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
15f30 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
15f40 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
15f50 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
15f60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15f70 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
15f80 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
15f90 64 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a  de xBestIndex(..
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
15fb0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
15fc0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
15fd0 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
15fe0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
15ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16030 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16040 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
16050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16060 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16070 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / This method re
16080 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65 63 74  leases a connect
16090 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ion to a virtual
160a0 20 74 61 62 6c 65 2e 20 4f 6e 6c 79 20 74 68 65   table. Only the
160b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
160c0 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63  lite3_vtab objec
160d0 74 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  t is destroyed. 
160e0 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
160f0 65 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  e is not..      
16100 20 20 2f 2f 2f 20 64 65 73 74 72 6f 79 65 64 20    /// destroyed 
16110 61 6e 64 20 61 6e 79 20 62 61 63 6b 69 6e 67 20  and any backing 
16120 73 74 6f 72 65 20 61 73 73 6f 63 69 61 74 65 64  store associated
16130 20 77 69 74 68 20 74 68 65 20 76 69 72 74 75 61   with the virtua
16140 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
16150 20 2f 2f 2f 20 70 65 72 73 69 73 74 73 2e 20 54   /// persists. T
16160 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f 65  his method undoe
16170 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 78 43  s the work of xC
16180 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20 20 20 20 20  onnect...       
16190 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
161a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
161b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
161c0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 20 64  is method is a d
161d0 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 20  estructor for a 
161e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
161f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
16200 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
16210 6e 74 72 61 73 74 20 74 68 69 73 20 6d 65 74 68  ntrast this meth
16220 6f 64 20 77 69 74 68 20 78 44 65 73 74 72 6f 79  od with xDestroy
16230 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 69  . The xDestroy i
16240 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 0d 0a  s a destructor..
16250 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
16260 74 68 65 20 65 6e 74 69 72 65 20 76 69 72 74 75  the entire virtu
16270 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
16280 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16290 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
162a0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
162b0 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20  The xDisconnect 
162c0 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
162d0 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
162e0 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
162f0 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
16300 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69  tation, though i
16310 74 20 69 73 20 61 63 63 65 70 74 61 62 6c 65 20  t is acceptable 
16320 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e  for the xDisconn
16330 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ect and..       
16340 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65   /// xDestroy me
16350 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20  thods to be the 
16360 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  same function if
16370 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73   that makes sens
16380 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
16390 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  // the particula
163a0 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  r virtual table.
163b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
163c0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
163d0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
163e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
163f0 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
16400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
16410 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
16420 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
16430 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
16440 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
16450 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
16460 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
16470 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
16480 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
16490 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
164a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
164b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
164c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
164d0 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
164e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
164f0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
16500 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
16510 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16560 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
16570 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
16580 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
16590 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
165a0 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e   releases a conn
165b0 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74  ection to a virt
165c0 75 61 6c 20 74 61 62 6c 65 2c 20 6a 75 73 74 20  ual table, just 
165d0 6c 69 6b 65 20 74 68 65 0d 0a 20 20 20 20 20 20  like the..      
165e0 20 20 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e 65 63    /// xDisconnec
165f0 74 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20 69 74  t method, and it
16600 20 61 6c 73 6f 20 64 65 73 74 72 6f 79 73 20 74   also destroys t
16610 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61  he underlying ta
16620 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
16630 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
16640 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64   This method und
16650 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
16660 78 43 72 65 61 74 65 2e 0d 0a 20 20 20 20 20 20  xCreate...      
16670 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
16680 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16690 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
166a0 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d  he xDisconnect m
166b0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
166c0 77 68 65 6e 65 76 65 72 20 61 20 64 61 74 61 62  whenever a datab
166d0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ase connection..
166e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74          /// that
166f0 20 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20   uses a virtual 
16700 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
16710 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   The xDestroy me
16720 74 68 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a 20 20  thod is only..  
16730 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64        /// called
16740 20 77 68 65 6e 20 61 20 44 52 4f 50 20 54 41 42   when a DROP TAB
16750 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
16760 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74  executed against
16770 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20   the virtual..  
16780 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e        /// table.
16790 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
167a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
167b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
167c0 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 65 73 74     /// The xDest
167d0 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20 72 65  roy method is re
167e0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
167f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
16800 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
16810 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75  ementation, thou
16820 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74 61  gh it is accepta
16830 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69 73  ble for the xDis
16840 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20  connect and..   
16850 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f       /// xDestro
16860 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20  y methods to be 
16870 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f  the same functio
16880 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20  n if that makes 
16890 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20  sense for..     
168a0 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69     /// the parti
168b0 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61  cular virtual ta
168c0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
168d0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
168e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
168f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
16900 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
16910 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
16920 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
16930 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
16940 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
16950 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
16960 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
16970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
16980 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
16990 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
169a0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
169b0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
169c0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
169d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
169e0 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a  Code xDestroy(..
169f0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
16a00 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
16a10 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
16a20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16a70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
16a80 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
16a90 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
16aa0 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20    /// The xOpen 
16ab0 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20 61  method creates a
16ac0 20 6e 65 77 20 63 75 72 73 6f 72 20 75 73 65 64   new cursor used
16ad0 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67 20 28   for accessing (
16ae0 72 65 61 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  read..        //
16af0 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74 69 6e 67  / and/or writing
16b00 29 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ) a virtual tabl
16b10 65 2e 20 41 20 73 75 63 63 65 73 73 66 75 6c 20  e. A successful 
16b20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
16b30 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
16b40 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 6c 6c 6f  method will allo
16b50 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  cate the memory 
16b60 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
16b70 76 74 61 62 5f 63 75 72 73 6f 72 20 28 6f 72 20  vtab_cursor (or 
16b80 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  a..        /// s
16b90 75 62 63 6c 61 73 73 29 2c 20 69 6e 69 74 69 61  ubclass), initia
16ba0 6c 69 7a 65 20 74 68 65 20 6e 65 77 20 6f 62 6a  lize the new obj
16bb0 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65 20 2a 70  ect, and make *p
16bc0 70 43 75 72 73 6f 72 20 70 6f 69 6e 74 20 74 6f  pCursor point to
16bd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
16be0 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e 20 54 68  e new object. Th
16bf0 65 20 73 75 63 63 65 73 73 66 75 6c 20 63 61 6c  e successful cal
16c00 6c 20 74 68 65 6e 20 72 65 74 75 72 6e 73 20 53  l then returns S
16c10 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20 20 20  QLITE_OK...     
16c20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16c40 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16c50 46 6f 72 20 65 76 65 72 79 20 73 75 63 63 65 73  For every succes
16c60 73 66 75 6c 20 63 61 6c 6c 20 74 6f 20 74 68 69  sful call to thi
16c70 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51  s method, the SQ
16c80 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a  Lite core will..
16c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65          /// late
16ca0 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 43 6c  r invoke the xCl
16cb0 6f 73 65 20 6d 65 74 68 6f 64 20 74 6f 20 64 65  ose method to de
16cc0 73 74 72 6f 79 20 74 68 65 20 61 6c 6c 6f 63 61  stroy the alloca
16cd0 74 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20  ted cursor...   
16ce0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
16cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16d00 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
16d10 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68  / The xOpen meth
16d20 6f 64 20 6e 65 65 64 20 6e 6f 74 20 69 6e 69 74  od need not init
16d30 69 61 6c 69 7a 65 20 74 68 65 20 70 56 74 61 62  ialize the pVtab
16d40 20 66 69 65 6c 64 20 6f 66 20 74 68 65 0d 0a 20   field of the.. 
16d50 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
16d60 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 73  e3_vtab_cursor s
16d70 74 72 75 63 74 75 72 65 2e 20 54 68 65 20 53 51  tructure. The SQ
16d80 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74  Lite core will t
16d90 61 6b 65 20 63 61 72 65 20 6f 66 0d 0a 20 20 20  ake care of..   
16da0 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 63 68       /// that ch
16db0 6f 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ore automaticall
16dc0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
16dd0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
16de0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
16df0 20 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75       /// A virtu
16e00 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
16e10 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  ntation must be 
16e20 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20  able to support 
16e30 61 6e 20 61 72 62 69 74 72 61 72 79 0d 0a 20 20  an arbitrary..  
16e40 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
16e50 20 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73   of simultaneous
16e60 6c 79 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2e  ly open cursors.
16e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16e80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
16e90 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
16ea0 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69 6e 69 74     /// When init
16eb0 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c 20 74 68  ially opened, th
16ec0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 20 61  e cursor is in a
16ed0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
16ee0 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
16ef0 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
16f00 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
16f10 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
16f20 6e 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  n the cursor pri
16f30 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  or to..        /
16f40 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74  // any attempt t
16f50 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72 20 72 65  o position or re
16f60 61 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ad from the curs
16f70 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
16f80 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
16f90 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
16fa0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f        /// The xO
16fb0 70 65 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65  pen method is re
16fc0 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
16fd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
16fe0 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
16ff0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
17000 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
17010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17020 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
17030 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17040 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
17050 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
17060 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
17070 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
17080 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
17090 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
170a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
170b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
170c0 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
170d0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
170e0 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
170f0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
17100 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20  dified to point 
17110 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20  to the newly..  
17120 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65        /// create
17130 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  d native sqlite3
17140 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
17150 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
17160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17170 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
17180 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
17190 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
171a0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
171b0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
171c0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
171d0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
171e0 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28  ErrorCode xOpen(
171f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
17200 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
17210 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
17220 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
17230 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
17240 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
172a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
172b0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
172c0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c       /// The xCl
172d0 6f 73 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73 65  ose method close
172e0 73 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  s a cursor previ
172f0 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 20  ously opened by 
17300 78 4f 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20 20  xOpen. The..    
17310 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
17320 6f 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ore will always 
17330 63 61 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63 65  call xClose once
17340 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
17350 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 20   opened..       
17360 20 2f 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65 6e   /// using xOpen
17370 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17380 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
17390 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
173a0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
173b0 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61 73 65  hod must release
173c0 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73 20 61   all resources a
173d0 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0d  llocated by the.
173e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72  .        /// cor
173f0 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70 65 6e  responding xOpen
17400 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75 74 69   call. The routi
17410 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 63  ne will not be c
17420 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76 65 6e  alled again even
17430 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66  ..        /// if
17440 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e 20 65   it returns an e
17450 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69 74 65  rror. The SQLite
17460 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74 20 75   core will not u
17470 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..        
17480 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
17490 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20 61 66  _cursor again af
174a0 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
174b0 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  closed...       
174c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
174d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
174e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
174f0 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20  e xClose method 
17500 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
17510 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
17520 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
17530 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
17540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17550 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17560 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
17570 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17580 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
17590 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
175a0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
175b0 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
175c0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
175d0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
175e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
175f0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
17600 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
17610 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
17620 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
17630 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
17640 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
17650 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17660 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65  ErrorCode xClose
17670 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
17680 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
17690 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
176a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
176b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
17700 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
17710 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
17720 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
17730 6d 65 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20  method begins a 
17740 73 65 61 72 63 68 20 6f 66 20 61 20 76 69 72 74  search of a virt
17750 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20 66  ual table. The f
17760 69 72 73 74 20 61 72 67 75 6d 65 6e 74 0d 0a 20  irst argument.. 
17770 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 61 20         /// is a 
17780 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62 79  cursor opened by
17790 20 78 4f 70 65 6e 2e 20 54 68 65 20 6e 65 78 74   xOpen. The next
177a0 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 20 64 65   two argument de
177b0 66 69 6e 65 20 61 0d 0a 20 20 20 20 20 20 20 20  fine a..        
177c0 2f 2f 2f 20 70 61 72 74 69 63 75 6c 61 72 20 73  /// particular s
177d0 65 61 72 63 68 20 69 6e 64 65 78 20 70 72 65 76  earch index prev
177e0 69 6f 75 73 6c 79 20 63 68 6f 73 65 6e 20 62 79  iously chosen by
177f0 20 78 42 65 73 74 49 6e 64 65 78 2e 20 54 68 65   xBestIndex. The
17800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70  ..        /// sp
17810 65 63 69 66 69 63 20 6d 65 61 6e 69 6e 67 73 20  ecific meanings 
17820 6f 66 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  of idxNum and id
17830 78 53 74 72 20 61 72 65 20 75 6e 69 6d 70 6f 72  xStr are unimpor
17840 74 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0d  tant as long as.
17850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69  .        /// xFi
17860 6c 74 65 72 20 61 6e 64 20 78 42 65 73 74 49 6e  lter and xBestIn
17870 64 65 78 20 61 67 72 65 65 20 6f 6e 20 77 68 61  dex agree on wha
17880 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20 69  t that meaning i
17890 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
178a0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
178b0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
178c0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65       /// The xBe
178d0 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69 6f 6e  stIndex function
178e0 20 6d 61 79 20 68 61 76 65 20 72 65 71 75 65 73   may have reques
178f0 74 65 64 20 74 68 65 20 76 61 6c 75 65 73 20 6f  ted the values o
17900 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20 20 20  f certain..     
17910 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69 6f     /// expressio
17920 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61 43 6f  ns using the aCo
17930 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e  nstraintUsage[].
17940 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75 65 73  argvIndex values
17950 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
17960 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
17970 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
17980 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65 73 20  e. Those values 
17990 61 72 65 20 70 61 73 73 65 64 20 74 6f 20 78 46  are passed to xF
179a0 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ilter..        /
179b0 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61 72 67  // using the arg
179c0 63 20 61 6e 64 20 61 72 67 76 20 70 61 72 61 6d  c and argv param
179d0 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  eters...        
179e0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
179f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
17a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
17a10 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
17a20 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  e contains one o
17a30 72 20 6d 6f 72 65 20 72 6f 77 73 20 74 68 61 74  r more rows that
17a40 20 6d 61 74 63 68 20 74 68 65 0d 0a 20 20 20 20   match the..    
17a50 20 20 20 20 2f 2f 2f 20 73 65 61 72 63 68 20 63      /// search c
17a60 72 69 74 65 72 69 61 2c 20 74 68 65 6e 20 74 68  riteria, then th
17a70 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  e cursor must be
17a80 20 6c 65 66 74 20 70 6f 69 6e 74 20 61 74 20 74   left point at t
17a90 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20  he first..      
17aa0 20 20 2f 2f 2f 20 72 6f 77 2e 20 53 75 62 73 65    /// row. Subse
17ab0 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 78  quent calls to x
17ac0 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72 6e 20  Eof must return 
17ad0 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 20 49 66  false (zero). If
17ae0 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   there..        
17af0 2f 2f 2f 20 61 72 65 20 6e 6f 20 72 6f 77 73 20  /// are no rows 
17b00 6d 61 74 63 68 2c 20 74 68 65 6e 20 74 68 65 20  match, then the 
17b10 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 6c  cursor must be l
17b20 65 66 74 20 69 6e 20 61 20 73 74 61 74 65 20 74  eft in a state t
17b30 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hat..        ///
17b40 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
17b50 78 45 6f 66 20 74 6f 20 72 65 74 75 72 6e 20 74  xEof to return t
17b60 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20  rue (non-zero). 
17b70 54 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e  The SQLite engin
17b80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  e..        /// w
17b90 69 6c 6c 20 75 73 65 20 74 68 65 20 78 43 6f 6c  ill use the xCol
17ba0 75 6d 6e 20 61 6e 64 20 78 52 6f 77 69 64 20 6d  umn and xRowid m
17bb0 65 74 68 6f 64 73 20 74 6f 20 61 63 63 65 73 73  ethods to access
17bc0 20 74 68 61 74 20 72 6f 77 20 63 6f 6e 74 65 6e   that row conten
17bd0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
17be0 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64  The xNext method
17bf0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
17c00 20 61 64 76 61 6e 63 65 20 74 6f 20 74 68 65 20   advance to the 
17c10 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20  next row...     
17c20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17c40 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17c50 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73 74  This method must
17c60 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
17c70 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c  K if successful,
17c80 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 65 72   or an sqlite er
17c90 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ror..        ///
17ca0 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72 72 6f   code if an erro
17cb0 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  r occurs...     
17cc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
17cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17ce0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17cf0 54 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  The xFilter meth
17d00 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
17d10 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
17d20 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
17d30 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
17d40 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
17d50 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
17d60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
17d70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17d80 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
17d90 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
17da0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
17db0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
17dc0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
17dd0 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
17de0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
17df0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
17e00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17e10 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20  e="idxNum">..   
17e20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
17e30 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
17e40 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
17e50 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
17e60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17e70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
17e80 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74 72  ram name="idxStr
17e90 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
17ea0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
17eb0 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  er to the UTF-8 
17ec0 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63  encoded string c
17ed0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20  ontaining the.. 
17ee0 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e         /// strin
17ef0 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
17f00 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
17f10 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
17f20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
17f30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17f40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
17f50 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
17f60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 61  The number of na
17f70 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
17f80 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
17f90 74 72 75 63 74 75 72 65 73 20 73 70 65 63 69 66  tructures specif
17fa0 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ied..        ///
17fb0 20 69 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   in <paramref na
17fc0 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20  me="argv" />... 
17fd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17fe0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17ff0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
18000 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
18010 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 6e 61  / An array of na
18020 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
18030 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
18040 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69  tructures contai
18050 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
18060 2f 20 66 69 6c 74 65 72 69 6e 67 20 63 72 69 74  / filtering crit
18070 65 72 69 61 20 66 6f 72 20 74 68 65 20 73 65 6c  eria for the sel
18080 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20  ected index...  
18090 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
180a0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
180b0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
180c0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
180d0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
180e0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
180f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
18100 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
18110 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d  orCode xFilter(.
18120 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
18130 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20  Ptr pCursor,..  
18140 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 64            int id
18150 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  xNum,..         
18160 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
18170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
18180 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
18190 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
181a0 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  v..            )
181b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
181c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18200 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18210 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18220 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
18230 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
18240 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20  he xNext method 
18250 61 64 76 61 6e 63 65 73 20 61 20 76 69 72 74 75  advances a virtu
18260 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
18270 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
18280 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
18290 61 20 72 65 73 75 6c 74 20 73 65 74 20 69 6e 69  a result set ini
182a0 74 69 61 74 65 64 20 62 79 20 78 46 69 6c 74 65  tiated by xFilte
182b0 72 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  r. If the cursor
182c0 20 69 73 20 61 6c 72 65 61 64 79 0d 0a 20 20 20   is already..   
182d0 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 69 6e       /// pointin
182e0 67 20 61 74 20 74 68 65 20 6c 61 73 74 20 72 6f  g at the last ro
182f0 77 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74  w when this rout
18300 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  ine is called, t
18310 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hen the..       
18320 20 2f 2f 2f 20 63 75 72 73 6f 72 20 6e 6f 20 6c   /// cursor no l
18330 6f 6e 67 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  onger points to 
18340 76 61 6c 69 64 20 64 61 74 61 20 61 6e 64 20 61  valid data and a
18350 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
18360 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
18370 20 2f 2f 2f 20 78 45 6f 66 20 6d 65 74 68 6f 64   /// xEof method
18380 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 72 75   must return tru
18390 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 49 66  e (non-zero). If
183a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0d 0a   the cursor is..
183b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63          /// succ
183c0 65 73 73 66 75 6c 6c 79 20 61 64 76 61 6e 63 65  essfully advance
183d0 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 72 6f 77  d to another row
183e0 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65   of content, the
183f0 6e 20 73 75 62 73 65 71 75 65 6e 74 0d 0a 20 20  n subsequent..  
18400 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 73 20        /// calls 
18410 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74  to xEof must ret
18420 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29  urn false (zero)
18430 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18440 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18450 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18460 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
18470 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20  hod must return 
18480 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75 63  SQLITE_OK if suc
18490 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20 73  cessful, or an s
184a0 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20 20  qlite error..   
184b0 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69 66       /// code if
184c0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
184d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
184e0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
184f0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
18500 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78      /// The xNex
18510 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  t method is requ
18520 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
18530 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
18540 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
18550 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
18560 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
18570 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
18580 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
18590 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
185a0 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
185b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
185c0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
185d0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
185e0 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
185f0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
18600 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
18610 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
18620 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
18630 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
18640 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
18650 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18660 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
18670 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
18680 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  de xNext(..     
18690 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
186a0 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
186b0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
186c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
186d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18710 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18720 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18730 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18740 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65 74 68  // The xEof meth
18750 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66  od must return f
18760 61 6c 73 65 20 28 7a 65 72 6f 29 20 69 66 20 74  alse (zero) if t
18770 68 65 20 73 70 65 63 69 66 69 65 64 20 63 75 72  he specified cur
18780 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sor..        ///
18790 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
187a0 73 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  s to a valid row
187b0 20 6f 66 20 64 61 74 61 2c 20 6f 72 20 74 72 75   of data, or tru
187c0 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a 20 20  e (non-zero)..  
187d0 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77        /// otherw
187e0 69 73 65 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ise. This method
187f0 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68   is called by th
18800 65 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 6d 6d  e SQL engine imm
18810 65 64 69 61 74 65 6c 79 0d 0a 20 20 20 20 20 20  ediately..      
18820 20 20 2f 2f 2f 20 61 66 74 65 72 20 65 61 63 68    /// after each
18830 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 4e 65   xFilter and xNe
18840 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d 0a  xt invocation...
18850 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
18860 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
18870 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
18880 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65   /// The xEof me
18890 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
188a0 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
188b0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
188c0 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
188d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
188e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
188f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
18900 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18910 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
18920 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
18930 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
18940 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
18950 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
18960 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
18970 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
18980 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
18990 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
189a0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f  / Non-zero if no
189b0 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
189c0 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20 6f  vailable; zero o
189d0 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20  therwise...     
189e0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
189f0 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78  >..        int x
18a00 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Eof(..          
18a10 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
18a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
18a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
18a90 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
18aa0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
18ab0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
18ac0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e  e SQLite core in
18ad0 76 6f 6b 65 73 20 74 68 69 73 20 6d 65 74 68 6f  vokes this metho
18ae0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69  d in order to fi
18af0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72  nd the value for
18b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
18b10 65 20 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e N-th column of
18b20 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
18b30 2e 20 4e 20 69 73 20 7a 65 72 6f 2d 62 61 73 65  . N is zero-base
18b40 64 20 73 6f 20 74 68 65 20 66 69 72 73 74 0d 0a  d so the first..
18b50 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75          /// colu
18b60 6d 6e 20 69 73 20 6e 75 6d 62 65 72 65 64 20 30  mn is numbered 0
18b70 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65  . The xColumn me
18b80 74 68 6f 64 20 6d 61 79 20 72 65 74 75 72 6e 20  thod may return 
18b90 69 74 73 20 72 65 73 75 6c 74 20 62 61 63 6b 0d  its result back.
18ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
18bb0 53 51 4c 69 74 65 20 75 73 69 6e 67 20 6f 6e 65  SQLite using one
18bc0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18bd0 67 20 69 6e 74 65 72 66 61 63 65 3a 0d 0a 20 20  g interface:..  
18be0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18bf0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18c00 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
18c10 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
18c20 65 73 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a 20 20  esult_blob()..  
18c30 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
18c40 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
18c50 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  ble()..        /
18c60 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
18c70 65 73 75 6c 74 5f 69 6e 74 28 29 0d 0a 20 20 20  esult_int()..   
18c80 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
18c90 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
18ca0 34 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  4()..        ///
18cb0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
18cc0 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20 20 20  ult_null()..    
18cd0 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
18ce0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
18cf0 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
18d00 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
18d10 74 5f 74 65 78 74 31 36 28 29 0d 0a 20 20 20 20  t_text16()..    
18d20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
18d30 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
18d40 36 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  6le()..        /
18d50 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
18d60 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28 29  esult_text16be()
18d70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
18d80 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
18d90 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d 0a 20 20 20  _zeroblob()..   
18da0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
18db0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18dc0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18dd0 2f 20 49 66 20 74 68 65 20 78 43 6f 6c 75 6d 6e  / If the xColumn
18de0 20 6d 65 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e   method implemen
18df0 74 61 74 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f 6e  tation calls non
18e00 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
18e10 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ns..        /// 
18e20 61 62 6f 76 65 2c 20 74 68 65 6e 20 74 68 65 20  above, then the 
18e30 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
18e40 75 6d 6e 20 64 65 66 61 75 6c 74 73 20 74 6f 20  umn defaults to 
18e50 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20  an SQL NULL...  
18e60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
18e70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
18e80 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
18e90 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e 20 65  // To raise an e
18ea0 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75 6d  rror, the xColum
18eb0 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20  n method should 
18ec0 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d 0a  use one of the..
18ed0 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 73 75          /// resu
18ee0 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68 6f 64  lt_text() method
18ef0 73 20 74 6f 20 73 65 74 20 74 68 65 20 65 72 72  s to set the err
18f00 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 2c  or message text,
18f10 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 6e 0d   then return an.
18f20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70  .        /// app
18f30 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63  ropriate error c
18f40 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e  ode. The xColumn
18f50 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74   method must ret
18f60 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e  urn SQLITE_OK on
18f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
18f80 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
18f90 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18fa0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18fb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
18fc0 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20   xColumn method 
18fd0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
18fe0 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
18ff0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
19000 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
19010 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19020 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
19030 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
19040 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
19050 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
19060 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
19070 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
19080 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
19090 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
190a0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
190b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
190c0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
190d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
190e0 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20  pContext">..    
190f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
19100 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
19110 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
19120 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 62  t structure to b
19130 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  e used..        
19140 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e 69 6e  /// for returnin
19150 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
19160 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
19170 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
19180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
19190 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
191a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
191b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
191c0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
191d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a         /// The z
191e0 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
191f0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
19200 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
19210 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
19220 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f      /// value to
19230 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   be returned... 
19240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
19250 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
19260 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
19270 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
19280 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
19290 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
192a0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
192b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
192c0 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
192d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
192e0 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
192f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
19300 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
19310 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
19320 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
19330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
19340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19390 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
193a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
193b0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
193c0 41 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 76  A successful inv
193d0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
193e0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 63 61 75 73  method will caus
193f0 65 20 2a 70 52 6f 77 69 64 20 74 6f 20 62 65 0d  e *pRowid to be.
19400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c  .        /// fil
19410 6c 65 64 20 77 69 74 68 20 74 68 65 20 72 6f 77  led with the row
19420 69 64 20 6f 66 20 72 6f 77 20 74 68 61 74 20 74  id of row that t
19430 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
19440 20 63 75 72 73 6f 72 20 70 43 75 72 20 69 73 0d   cursor pCur is.
19450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72  .        /// cur
19460 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
19470 61 74 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20  at. This method 
19480 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
19490 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 49 74  K on success. It
194a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
194b0 74 75 72 6e 73 20 61 6e 20 61 70 70 72 6f 70 72  turns an appropr
194c0 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20  iate error code 
194d0 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
194e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
194f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19500 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19510 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d 65 74  / The xRowid met
19520 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
19530 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
19540 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
19550 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
19560 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
19570 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
19580 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
19590 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
195a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
195b0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
195c0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
195d0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
195e0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
195f0 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
19600 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
19610 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
19620 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19630 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
19640 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
19650 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
19660 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
19670 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
19680 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
19690 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
196a0 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
196b0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
196c0 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
196d0 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
196e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
196f0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
19700 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
19710 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
19720 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
19730 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
19740 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
19750 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
19760 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28  rrorCode xRowId(
19770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
19780 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
19790 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
197a0 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
197b0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
197c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
197d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19810 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
19820 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
19830 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
19840 20 20 20 2f 2f 2f 20 41 6c 6c 20 63 68 61 6e 67     /// All chang
19850 65 73 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  es to a virtual 
19860 74 61 62 6c 65 20 61 72 65 20 6d 61 64 65 20 75  table are made u
19870 73 69 6e 67 20 74 68 65 20 78 55 70 64 61 74 65  sing the xUpdate
19880 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
19890 20 20 2f 2f 2f 20 54 68 69 73 20 6f 6e 65 20 6d    /// This one m
198a0 65 74 68 6f 64 20 63 61 6e 20 62 65 20 75 73 65  ethod can be use
198b0 64 20 74 6f 20 69 6e 73 65 72 74 2c 20 64 65 6c  d to insert, del
198c0 65 74 65 2c 20 6f 72 20 75 70 64 61 74 65 2e 0d  ete, or update..
198d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
198e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
198f0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19900 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 63 20 70    /// The argc p
19910 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66 69  arameter specifi
19920 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
19930 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
19940 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 2f 2f  argv..        //
19950 2f 20 61 72 72 61 79 2e 20 54 68 65 20 76 61 6c  / array. The val
19960 75 65 20 6f 66 20 61 72 67 63 20 77 69 6c 6c 20  ue of argc will 
19970 62 65 20 31 20 66 6f 72 20 61 20 70 75 72 65 20  be 1 for a pure 
19980 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
19990 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
199a0 20 4e 2b 32 20 66 6f 72 20 61 6e 20 69 6e 73 65   N+2 for an inse
199b0 72 74 20 6f 72 20 72 65 70 6c 61 63 65 20 6f 72  rt or replace or
199c0 20 75 70 64 61 74 65 20 77 68 65 72 65 20 4e 20   update where N 
199d0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
199e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
199f0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
19a00 6c 65 2e 20 49 6e 20 74 68 65 20 70 72 65 76 69  le. In the previ
19a10 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20 4e 20  ous sentence, N 
19a20 69 6e 63 6c 75 64 65 73 20 61 6e 79 0d 0a 20 20  includes any..  
19a30 20 20 20 20 20 20 2f 2f 2f 20 68 69 64 64 65 6e        /// hidden
19a40 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20 20 20   columns...     
19a50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19a60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19a70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
19a80 45 76 65 72 79 20 61 72 67 76 20 65 6e 74 72 79  Every argv entry
19a90 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f 6e   will have a non
19aa0 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 43  -NULL value in C
19ab0 20 62 75 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e   but may contain
19ac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
19ad0 65 20 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c 4c  e SQL value NULL
19ae0 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
19af0 2c 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 74  , it is always t
19b00 72 75 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  rue that..      
19b10 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d 30    /// argv[i]!=0
19b20 20 66 6f 72 20 69 20 62 65 74 77 65 65 6e 20 30   for i between 0
19b30 20 61 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f 77   and argc-1. How
19b40 65 76 65 72 2c 20 69 74 20 6d 69 67 68 74 20 62  ever, it might b
19b50 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
19b60 2f 2f 20 63 61 73 65 20 74 68 61 74 20 73 71 6c  // case that sql
19b70 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
19b80 61 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54 45  argv[i])==SQLITE
19b90 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20  _NULL...        
19ba0 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
19bb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
19bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
19bd0 20 61 72 67 76 5b 30 5d 20 70 61 72 61 6d 65 74   argv[0] paramet
19be0 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  er is the rowid 
19bf0 6f 66 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  of a row in the 
19c00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
19c10 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65         /// to be
19c20 20 64 65 6c 65 74 65 64 2e 20 49 66 20 61 72 67   deleted. If arg
19c30 76 5b 30 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e  v[0] is an SQL N
19c40 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20 64 65 6c  ULL, then no del
19c50 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a 20  etion occurs... 
19c60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
19c70 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
19c80 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
19c90 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 31 5d 20  /// The argv[1] 
19ca0 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65  parameter is the
19cb0 20 72 6f 77 69 64 20 6f 66 20 61 20 6e 65 77 20   rowid of a new 
19cc0 72 6f 77 20 74 6f 20 62 65 20 69 6e 73 65 72 74  row to be insert
19cd0 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 20 20 20  ed into..       
19ce0 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
19cf0 20 74 61 62 6c 65 2e 20 49 66 20 61 72 67 76 5b   table. If argv[
19d00 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  1] is an SQL NUL
19d10 4c 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  L, then the..   
19d20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
19d30 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 63 68 6f  ntation must cho
19d40 6f 73 65 20 61 20 72 6f 77 69 64 20 66 6f 72 20  ose a rowid for 
19d50 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65 72 74  the newly insert
19d60 65 64 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  ed row...       
19d70 20 2f 2f 2f 20 53 75 62 73 65 71 75 65 6e 74 20   /// Subsequent 
19d80 61 72 67 76 5b 5d 20 65 6e 74 72 69 65 73 20 63  argv[] entries c
19d90 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 6f 66  ontain values of
19da0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
19db0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
19dc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
19dd0 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61  in the order tha
19de0 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 77 65  t the columns we
19df0 72 65 20 64 65 63 6c 61 72 65 64 2e 20 54 68 65  re declared. The
19e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
19e10 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
19e20 77 69 6c 6c 20 6d 61 74 63 68 20 74 68 65 20 74  will match the t
19e30 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
19e40 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20   that the..     
19e50 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20     /// xConnect 
19e60 6f 72 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  or xCreate metho
19e70 64 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  d made using the
19e80 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
19e90 5f 76 74 61 62 28 29 0d 0a 20 20 20 20 20 20 20  _vtab()..       
19ea0 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c 20 68   /// call. All h
19eb0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72  idden columns ar
19ec0 65 20 69 6e 63 6c 75 64 65 64 2e 0d 0a 20 20 20  e included...   
19ed0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19ee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19ef0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19f00 2f 20 57 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  / When doing an 
19f10 69 6e 73 65 72 74 20 77 69 74 68 6f 75 74 20 61  insert without a
19f20 20 72 6f 77 69 64 20 28 61 72 67 63 3e 31 2c 20   rowid (argc>1, 
19f30 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51  argv[1] is an SQ
19f40 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  L..        /// N
19f50 55 4c 4c 29 2c 20 74 68 65 20 69 6d 70 6c 65 6d  ULL), the implem
19f60 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 65  entation must se
19f70 74 20 2a 70 52 6f 77 69 64 20 74 6f 20 74 68 65  t *pRowid to the
19f80 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20   rowid of the.. 
19f90 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 77 6c 79         /// newly
19fa0 20 69 6e 73 65 72 74 65 64 20 72 6f 77 3b 20 74   inserted row; t
19fb0 68 69 73 20 77 69 6c 6c 20 62 65 63 6f 6d 65 20  his will become 
19fc0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
19fd0 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
19fe0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6c     /// sqlite3_l
19ff0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1a000 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 74  () function. Set
1a010 74 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20  ting this value 
1a020 69 6e 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20  in all the..    
1a030 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20 63 61      /// other ca
1a040 73 65 73 20 69 73 20 61 20 68 61 72 6d 6c 65 73  ses is a harmles
1a050 73 20 6e 6f 2d 6f 70 3b 20 74 68 65 20 53 51 4c  s no-op; the SQL
1a060 69 74 65 20 65 6e 67 69 6e 65 20 69 67 6e 6f 72  ite engine ignor
1a070 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  es the..        
1a080 2f 2f 2f 20 2a 70 52 6f 77 69 64 20 72 65 74 75  /// *pRowid retu
1a090 72 6e 20 76 61 6c 75 65 20 69 66 20 61 72 67 63  rn value if argc
1a0a0 3d 3d 31 20 6f 72 20 61 72 67 76 5b 31 5d 20 69  ==1 or argv[1] i
1a0b0 73 20 6e 6f 74 20 61 6e 20 53 51 4c 20 4e 55 4c  s not an SQL NUL
1a0c0 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
1a0d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a0e0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1a0f0 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 61       /// Each ca
1a100 6c 6c 20 74 6f 20 78 55 70 64 61 74 65 20 77 69  ll to xUpdate wi
1a110 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e 65  ll fall into one
1a120 20 6f 66 20 63 61 73 65 73 20 73 68 6f 77 6e 20   of cases shown 
1a130 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20 20  below. Note..   
1a140 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 72 65       /// that re
1a150 66 65 72 65 6e 63 65 73 20 74 6f 20 61 72 67 76  ferences to argv
1a160 5b 69 5d 20 6d 65 61 6e 20 74 68 65 20 53 51 4c  [i] mean the SQL
1a170 20 76 61 6c 75 65 20 68 65 6c 64 20 77 69 74 68   value held with
1a180 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
1a190 2f 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65  /// argv[i] obje
1a1a0 63 74 2c 20 6e 6f 74 20 74 68 65 20 61 72 67 76  ct, not the argv
1a1b0 5b 69 5d 20 6f 62 6a 65 63 74 20 69 74 73 65 6c  [i] object itsel
1a1c0 66 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  f...        /// 
1a1d0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1a1e0 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
1a1f0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67       ///     arg
1a200 63 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 2f  c = 1..        /
1a210 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
1a220 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a230 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a240 20 20 20 20 54 68 65 20 73 69 6e 67 6c 65 20 72      The single r
1a250 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 65 71  ow with rowid eq
1a260 75 61 6c 20 74 6f 20 61 72 67 76 5b 30 5d 20 69  ual to argv[0] i
1a270 73 20 64 65 6c 65 74 65 64 2e 20 4e 6f 0d 0a 20  s deleted. No.. 
1a280 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
1a290 20 20 20 69 6e 73 65 72 74 20 6f 63 63 75 72 73     insert occurs
1a2a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1a2b0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1a2c0 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
1a2d0 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
1a2e0 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
1a2f0 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
1a300 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
1a310 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
1a320 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a330 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
1a340 20 20 20 41 20 6e 65 77 20 72 6f 77 20 69 73 20     A new row is 
1a350 69 6e 73 65 72 74 65 64 20 77 69 74 68 20 61 20  inserted with a 
1a360 72 6f 77 69 64 20 61 72 67 76 5b 31 5d 20 61 6e  rowid argv[1] an
1a370 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20  d column..      
1a380 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 76 61    ///         va
1a390 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20  lues in argv[2] 
1a3a0 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49  and following. I
1a3b0 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20  f argv[1] is an 
1a3c0 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20  SQL NULL,..     
1a3d0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74     ///         t
1a3e0 68 65 20 61 20 6e 65 77 20 75 6e 69 71 75 65 20  he a new unique 
1a3f0 72 6f 77 69 64 20 69 73 20 67 65 6e 65 72 61 74  rowid is generat
1a400 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1a410 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1a420 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1a430 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
1a440 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
1a450 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
1a460 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20  /     argv[0] ? 
1a470 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
1a480 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
1a490 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20  argv[1]..       
1a4a0 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
1a4b0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1a4c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
1a4d0 20 20 20 20 20 20 54 68 65 20 72 6f 77 20 77 69        The row wi
1a4e0 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 30 5d  th rowid argv[0]
1a4f0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1a500 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 0d 0a   new values in..
1a510 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a520 20 20 20 20 61 72 67 76 5b 32 5d 20 61 6e 64 20      argv[2] and 
1a530 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65  following parame
1a540 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ters...        /
1a550 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1a560 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
1a570 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
1a580 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20  argc > 1..      
1a590 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
1a5a0 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20  ] ? NULL..      
1a5b0 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
1a5c0 5d 20 3f 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20  ] ? argv[1]..   
1a5d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
1a5e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a5f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a600 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 72 6f  /         The ro
1a610 77 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67  w with rowid arg
1a620 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64 20  v[0] is updated 
1a630 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b  with rowid argv[
1a640 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  1]..        /// 
1a650 20 20 20 20 20 20 20 20 61 6e 64 20 6e 65 77 20          and new 
1a660 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32  values in argv[2
1a670 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ] and following 
1a680 70 61 72 61 6d 65 74 65 72 73 2e 20 54 68 69 73  parameters. This
1a690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
1a6a0 20 20 20 20 20 20 77 69 6c 6c 20 6f 63 63 75 72        will occur
1a6b0 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
1a6c0 74 65 6d 65 6e 74 20 75 70 64 61 74 65 73 20 61  tement updates a
1a6d0 20 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a 20   rowid, as in.. 
1a6e0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
1a6f0 20 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74     the statement
1a700 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
1a710 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1a720 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
1a730 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
1a740 20 20 20 20 55 50 44 41 54 45 20 74 61 62 6c 65      UPDATE table
1a750 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64   SET rowid=rowid
1a760 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b 0d 0a 20  +1 WHERE ...;.. 
1a770 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
1a780 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
1a790 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
1a7a0 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74 65 20  /// The xUpdate 
1a7b0 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
1a7c0 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20  rn SQLITE_OK if 
1a7d0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 69 74 20 69  and only if it i
1a7e0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  s..        /// s
1a7f0 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20 61 20  uccessful. If a 
1a800 66 61 69 6c 75 72 65 20 6f 63 63 75 72 73 2c 20  failure occurs, 
1a810 74 68 65 20 78 55 70 64 61 74 65 20 6d 75 73 74  the xUpdate must
1a820 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20   return an..    
1a830 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69      /// appropri
1a840 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  ate error code. 
1a850 4f 6e 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  On a failure, th
1a860 65 20 70 56 54 61 62 2d 3e 7a 45 72 72 4d 73 67  e pVTab->zErrMsg
1a870 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20   element..      
1a880 20 20 2f 2f 2f 20 6d 61 79 20 6f 70 74 69 6f 6e    /// may option
1a890 61 6c 6c 79 20 62 65 20 72 65 70 6c 61 63 65 64  ally be replaced
1a8a0 20 77 69 74 68 20 65 72 72 6f 72 20 6d 65 73 73   with error mess
1a8b0 61 67 65 20 74 65 78 74 20 73 74 6f 72 65 64 20  age text stored 
1a8c0 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  in memory..     
1a8d0 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65 64     /// allocated
1a8e0 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 75 73 69   from SQLite usi
1a8f0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 73 75 63  ng functions suc
1a900 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72  h as sqlite3_mpr
1a910 69 6e 74 66 28 29 20 6f 72 0d 0a 20 20 20 20 20  intf() or..     
1a920 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
1a930 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20 20 20 20 20  alloc()...      
1a940 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1a950 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a960 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
1a970 66 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 65  f the xUpdate me
1a980 74 68 6f 64 20 76 69 6f 6c 61 74 65 73 20 73 6f  thod violates so
1a990 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66  me constraint of
1a9a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1a9b0 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
1a9c0 28 69 6e 63 6c 75 64 69 6e 67 2c 20 62 75 74 20  (including, but 
1a9d0 6e 6f 74 20 6c 69 6d 69 74 65 64 20 74 6f 2c 20  not limited to, 
1a9e0 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
1a9f0 6f 72 65 20 61 20 76 61 6c 75 65 20 6f 66 20 74  ore a value of t
1aa00 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1aa10 77 72 6f 6e 67 20 64 61 74 61 74 79 70 65 2c 20  wrong datatype, 
1aa20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
1aa30 6f 72 65 20 61 20 76 61 6c 75 65 20 74 68 61 74  ore a value that
1aa40 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72   is too large or
1aa50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
1aa60 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20 61 74 74 65  o small, or atte
1aa70 6d 70 74 69 6e 67 20 74 6f 20 63 68 61 6e 67 65  mpting to change
1aa80 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61 6c   a read-only val
1aa90 75 65 29 20 74 68 65 6e 20 74 68 65 0d 0a 20 20  ue) then the..  
1aaa0 20 20 20 20 20 20 2f 2f 2f 20 78 55 70 64 61 74        /// xUpdat
1aab0 65 20 6d 75 73 74 20 66 61 69 6c 20 77 69 74 68  e must fail with
1aac0 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
1aad0 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20  error code...   
1aae0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1aaf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1ab00 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1ab10 2f 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65  / There might be
1ab20 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71 6c   one or more sql
1ab30 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
1ab40 20 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20 61 6e   objects open an
1ab50 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d in..        //
1ab60 2f 20 75 73 65 20 6f 6e 20 74 68 65 20 76 69 72  / use on the vir
1ab70 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61  tual table insta
1ab80 6e 63 65 20 61 6e 64 20 70 65 72 68 61 70 73 20  nce and perhaps 
1ab90 65 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77 20  even on the row 
1aba0 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
1abb0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1abc0 65 20 77 68 65 6e 20 74 68 65 20 78 55 70 64 61  e when the xUpda
1abd0 74 65 20 6d 65 74 68 6f 64 20 69 73 20 69 6e 76  te method is inv
1abe0 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20  oked. The..     
1abf0 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
1ac00 61 74 69 6f 6e 20 6f 66 20 78 55 70 64 61 74 65  ation of xUpdate
1ac10 20 6d 75 73 74 20 62 65 20 70 72 65 70 61 72 65   must be prepare
1ac20 64 20 66 6f 72 20 61 74 74 65 6d 70 74 73 20 74  d for attempts t
1ac30 6f 20 64 65 6c 65 74 65 0d 0a 20 20 20 20 20 20  o delete..      
1ac40 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79 20    /// or modify 
1ac50 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
1ac60 65 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65 72  e out from other
1ac70 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72   existing cursor
1ac80 73 2e 20 49 66 20 74 68 65 0d 0a 20 20 20 20 20  s. If the..     
1ac90 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
1aca0 61 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63 6f  able cannot acco
1acb0 6d 6d 6f 64 61 74 65 20 73 75 63 68 20 63 68 61  mmodate such cha
1acc0 6e 67 65 73 2c 20 74 68 65 20 78 55 70 64 61 74  nges, the xUpdat
1acd0 65 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  e method..      
1ace0 20 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75 72    /// must retur
1acf0 6e 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  n an error code.
1ad00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ad10 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1ad20 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1ad30 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61     /// The xUpda
1ad40 74 65 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74  te method is opt
1ad50 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65 20 78 55  ional. If the xU
1ad60 70 64 61 74 65 20 70 6f 69 6e 74 65 72 20 69 6e  pdate pointer in
1ad70 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1ad80 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  / sqlite3_module
1ad90 20 66 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74   for a virtual t
1ada0 61 62 6c 65 20 69 73 20 61 20 4e 55 4c 4c 20 70  able is a NULL p
1adb0 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65  ointer, then the
1adc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
1add0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 72  rtual table is r
1ade0 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20  ead-only...     
1adf0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1ae00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1ae10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1ae20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1ae30 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1ae40 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1ae50 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1ae60 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1ae70 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1ae80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ae90 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1aea0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1aeb0 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
1aec0 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
1aed0 66 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65  f new or modifie
1aee0 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  d column values 
1aef0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20 20  contained in..  
1af00 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1af10 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20  ref name="argv" 
1af20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />...        ///
1af30 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1af40 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1af50 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
1af60 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
1af70 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69 6e  y of native poin
1af80 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  ters to sqlite3_
1af90 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65 73  value structures
1afa0 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
1afb0 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77       /// the new
1afc0 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c   or modified col
1afd0 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61  umn values, if a
1afe0 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
1aff0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1b000 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1b010 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
1b020 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
1b030 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
1b040 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1b050 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1b060 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
1b070 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
1b080 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
1b090 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61   for the row tha
1b0a0 74 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20  t was inserted, 
1b0b0 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
1b0c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1b0d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1b0e0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1b0f0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1b100 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1b110 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b120 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1b130 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1b140 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  e xUpdate(..    
1b150 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1b160 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
1b170 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
1b180 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1b190 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
1b1a0 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
1b1b0 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
1b1c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1b1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b220 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1b230 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b240 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1b250 54 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69  This method begi
1b260 6e 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ns a transaction
1b270 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   on a virtual ta
1b280 62 6c 65 2e 20 54 68 69 73 20 69 73 20 6d 65 74  ble. This is met
1b290 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hod..        ///
1b2a0 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
1b2b0 65 20 78 42 65 67 69 6e 20 70 6f 69 6e 74 65 72  e xBegin pointer
1b2c0 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75   of sqlite3_modu
1b2d0 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0d  le may be NULL..
1b2e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1b2f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1b300 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1b310 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1b320 64 20 69 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  d is always foll
1b330 6f 77 65 64 20 62 79 20 6f 6e 65 20 63 61 6c 6c  owed by one call
1b340 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20 78   to either the x
1b350 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20  Commit or..     
1b360 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b     /// xRollback
1b370 20 6d 65 74 68 6f 64 2e 20 56 69 72 74 75 61 6c   method. Virtual
1b380 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69   table transacti
1b390 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2c  ons do not nest,
1b3a0 20 73 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   so the..       
1b3b0 20 2f 2f 2f 20 78 42 65 67 69 6e 20 6d 65 74 68   /// xBegin meth
1b3c0 6f 64 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 69  od will not be i
1b3d0 6e 76 6f 6b 65 64 20 6d 6f 72 65 20 74 68 61 6e  nvoked more than
1b3e0 20 6f 6e 63 65 20 6f 6e 20 61 20 73 69 6e 67 6c   once on a singl
1b3f0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1b400 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69 74  irtual table wit
1b410 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e  hout an interven
1b420 69 6e 67 20 63 61 6c 6c 20 74 6f 20 65 69 74 68  ing call to eith
1b430 65 72 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20  er xCommit or.. 
1b440 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c         /// xRoll
1b450 62 61 63 6b 2e 20 4d 75 6c 74 69 70 6c 65 20 63  back. Multiple c
1b460 61 6c 6c 73 20 74 6f 20 6f 74 68 65 72 20 6d 65  alls to other me
1b470 74 68 6f 64 73 20 63 61 6e 20 61 6e 64 20 6c 69  thods can and li
1b480 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20 20 20 20 20  kely will..     
1b490 20 20 20 2f 2f 2f 20 6f 63 63 75 72 20 69 6e 20     /// occur in 
1b4a0 62 65 74 77 65 65 6e 20 74 68 65 20 78 42 65 67  between the xBeg
1b4b0 69 6e 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65  in and the corre
1b4c0 73 70 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d 69 74  sponding xCommit
1b4d0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
1b4e0 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20   xRollback...   
1b4f0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1b500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b510 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1b520 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1b530 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1b540 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1b550 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1b560 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1b570 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1b580 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b590 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1b5a0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1b5b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
1b5c0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
1b5d0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
1b5e0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1b5f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
1b600 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 67  teErrorCode xBeg
1b610 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
1b620 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
1b630 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1b640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1b6a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1b6b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1b6c0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1b6d0 6d 65 74 68 6f 64 20 73 69 67 6e 61 6c 73 20 74  method signals t
1b6e0 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 74 77  he start of a tw
1b6f0 6f 2d 70 68 61 73 65 20 63 6f 6d 6d 69 74 20 6f  o-phase commit o
1b700 6e 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  n a virtual..   
1b710 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 20       /// table. 
1b720 54 68 69 73 20 69 73 20 6d 65 74 68 6f 64 20 69  This is method i
1b730 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20  s optional. The 
1b740 78 53 79 6e 63 20 70 6f 69 6e 74 65 72 20 6f 66  xSync pointer of
1b750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
1b760 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
1b770 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   be NULL...     
1b780 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1b790 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b7a0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1b7b0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 6f  This method is o
1b7c0 6e 6c 79 20 69 6e 76 6f 6b 65 64 20 61 66 74 65  nly invoked afte
1b7d0 72 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 78 42  r call to the xB
1b7e0 65 67 69 6e 20 6d 65 74 68 6f 64 20 61 6e 64 0d  egin method and.
1b7f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 69  .        /// pri
1b800 6f 72 20 74 6f 20 61 6e 20 78 43 6f 6d 6d 69 74  or to an xCommit
1b810 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 49   or xRollback. I
1b820 6e 20 6f 72 64 65 72 20 74 6f 20 69 6d 70 6c 65  n order to imple
1b830 6d 65 6e 74 20 74 77 6f 2d 70 68 61 73 65 0d 0a  ment two-phase..
1b840 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 6d          /// comm
1b850 69 74 2c 20 74 68 65 20 78 53 79 6e 63 20 6d 65  it, the xSync me
1b860 74 68 6f 64 20 6f 6e 20 61 6c 6c 20 76 69 72 74  thod on all virt
1b870 75 61 6c 20 74 61 62 6c 65 73 20 69 73 20 69 6e  ual tables is in
1b880 76 6f 6b 65 64 20 70 72 69 6f 72 20 74 6f 0d 0a  voked prior to..
1b890 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 76 6f          /// invo
1b8a0 6b 69 6e 67 20 74 68 65 20 78 43 6f 6d 6d 69 74  king the xCommit
1b8b0 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76   method on any v
1b8c0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66  irtual table. If
1b8d0 20 61 6e 79 20 6f 66 20 74 68 65 0d 0a 20 20 20   any of the..   
1b8e0 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 20 6d       /// xSync m
1b8f0 65 74 68 6f 64 73 20 66 61 69 6c 2c 20 74 68 65  ethods fail, the
1b900 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
1b910 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62 61  ion is rolled ba
1b920 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
1b930 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1b940 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1b950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1b960 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1b970 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b980 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1b990 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1b9a0 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1b9b0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1b9c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1b9d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1b9e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1b9f0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1ba00 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1ba10 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1ba20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1ba30 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1ba40 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20  ode xSync(..    
1ba50 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1ba60 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
1ba70 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1baa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bac0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1bad0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1bae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1baf0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1bb00 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61  / This method ca
1bb10 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20 74  uses a virtual t
1bb20 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  able transaction
1bb30 20 74 6f 20 63 6f 6d 6d 69 74 2e 20 54 68 69 73   to commit. This
1bb40 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
1bb50 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
1bb60 6e 61 6c 2e 20 54 68 65 20 78 43 6f 6d 6d 69 74  nal. The xCommit
1bb70 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69   pointer of sqli
1bb80 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62  te3_module may b
1bb90 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  e..        /// N
1bba0 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ULL...        //
1bbb0 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1bbc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1bbd0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61 6c         /// A cal
1bbe0 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64  l to this method
1bbf0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
1bc00 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20  a prior call to 
1bc10 78 42 65 67 69 6e 20 61 6e 64 0d 0a 20 20 20 20  xBegin and..    
1bc20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 2e 0d 0a      /// xSync...
1bc30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1bc40 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1bc50 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1bc60 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1bc70 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
1bc80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
1bc90 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
1bca0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
1bcb0 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
1bcc0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
1bcd0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1bce0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1bcf0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1bd00 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1bd10 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1bd20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1bd30 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1bd40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
1bd50 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
1bd60 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1bd70 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
1bd80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bde0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1bdf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1be00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1be10 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75 73 65  his method cause
1be20 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
1be30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  e transaction to
1be40 20 72 6f 6c 6c 62 61 63 6b 2e 20 54 68 69 73 20   rollback. This 
1be50 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
1be60 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e  method is option
1be70 61 6c 2e 20 54 68 65 20 78 52 6f 6c 6c 62 61 63  al. The xRollbac
1be80 6b 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c  k pointer of sql
1be90 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20  ite3_module may 
1bea0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1beb0 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
1bec0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1bed0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1bee0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61          /// A ca
1bef0 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f  ll to this metho
1bf00 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  d always follows
1bf10 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
1bf20 20 78 42 65 67 69 6e 2e 0d 0a 20 20 20 20 20 20   xBegin...      
1bf30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1bf40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1bf50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1bf60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1bf70 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
1bf80 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1bf90 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
1bfa0 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
1bfb0 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
1bfc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1bfd0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1bfe0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1bff0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1c000 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1c010 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1c020 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1c030 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1c040 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61  rrorCode xRollba
1c050 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
1c060 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
1c070 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1c080 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1c0e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1c0f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1c100 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1c110 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73 20  method provides 
1c120 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68 61  notification tha
1c130 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  t the virtual ta
1c140 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
1c150 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1c160 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c  that the virtual
1c170 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 67   table will be g
1c180 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65 2e  iven a new name.
1c190 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   If..        ///
1c1a0 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74   this method ret
1c1b0 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 74  urns SQLITE_OK t
1c1c0 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61 6d  hen SQLite renam
1c1d0 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  es the table. If
1c1e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1c1f0 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e  is method return
1c200 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  s an error code 
1c210 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69 6e  then the renamin
1c220 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e 0d  g is prevented..
1c230 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c240 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1c250 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1c260 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61 6d    /// The xRenam
1c270 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  e method is requ
1c280 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
1c290 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
1c2a0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
1c2b0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
1c2c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1c2d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1c2e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1c2f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1c300 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1c310 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1c320 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1c330 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1c340 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1c350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c360 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1c370 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c380 6e 41 72 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  nArg">..        
1c390 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
1c3a0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
1c3b0 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
1c3c0 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20  g sought...     
1c3d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1c3e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1c3f0 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22  ram name="zName"
1c400 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1c410 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
1c420 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f  unction being so
1c430 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ught...        /
1c440 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1c450 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1c460 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e  name="callback">
1c470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1c480 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
1c490 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1c4a0 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1c4b0 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20  ontain the..    
1c4c0 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65      /// delegate
1c4d0 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1c4e0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1c4f0 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63  e specified func
1c500 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
1c510 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1c520 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1c530 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
1c540 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
1c550 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
1c560 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1c570 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1c580 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the.. 
1c590 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76         /// nativ
1c5a0 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e  e user-data poin
1c5b0 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
1c5c0 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
1c5d0 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
1c5e0 22 63 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e 0d 0a  "callback" />...
1c5f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1c600 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1c610 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1c620 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
1c630 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  o if the specifi
1c640 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ed function was 
1c650 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68 65  found; zero othe
1c660 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  rwise...        
1c670 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1c680 20 20 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e          int xFin
1c690 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
1c6a0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1c6b0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
1c6c0 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20     int nArg,..  
1c6d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1c6e0 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20   zName,..       
1c6f0 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
1c700 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
1c710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1c720 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
1c730 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
1c740 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1c750 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c7a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1c7b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c7c0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1c7d0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 70  // This method p
1c7e0 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63 61  rovides notifica
1c7f0 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69  tion that the vi
1c800 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
1c810 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
1c820 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  ntation that the
1c830 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
1c840 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20 6e  ill be given a n
1c850 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20 20  ew name. If..   
1c860 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65       /// this me
1c870 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c  thod returns SQL
1c880 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c 69  ITE_OK then SQLi
1c890 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20 74  te renames the t
1c8a0 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20 20  able. If..      
1c8b0 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f    /// this metho
1c8c0 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
1c8d0 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68 65  or code then the
1c8e0 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72 65   renaming is pre
1c8f0 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  vented...       
1c900 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1c910 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1c920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1c930 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
1c940 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
1c950 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
1c960 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
1c970 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
1c980 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c990 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1c9a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1c9b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1c9c0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1c9d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1c9e0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1c9f0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1ca00 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1ca10 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1ca20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1ca30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ca40 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a  m name="zNew">..
1ca50 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ca60 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1ca70 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  o the UTF-8 enco
1ca80 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  ded string conta
1ca90 69 6e 69 6e 67 20 74 68 65 20 6e 65 77 0d 0a 20  ining the new.. 
1caa0 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20         /// name 
1cab0 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
1cac0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1cad0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1cae0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1caf0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1cb00 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1cb10 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1cb20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1cb30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1cb40 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1cb50 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20   xRename(..     
1cb60 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1cb70 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
1cb80 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20    IntPtr zNew.. 
1cb90 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1cba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1cc00 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1cc10 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1cc20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65         /// These
1cc30 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65   methods provide
1cc40 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1cc50 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
1cc60 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
1cc70 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f  / opportunity to
1cc80 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65   implement neste
1cc90 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  d transactions. 
1cca0 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d  They are always.
1ccb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74  .        /// opt
1ccc0 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f  ional and will o
1ccd0 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  nly be called in
1cce0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1ccf0 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e  3.7.7 and later.
1cd00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cd10 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1cd20 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1cd30 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76     /// When xSav
1cd40 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69  epoint(X,N) is i
1cd50 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20  nvoked, that is 
1cd60 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20  a signal to the 
1cd70 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
1cd80 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61   /// table X tha
1cd90 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65  t it should save
1cda0 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74 61   its current sta
1cdb0 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20  te as savepoint 
1cdc0 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f  N. A..        //
1cdd0 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  / subsequent cal
1cde0 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1cdf0 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74  (X,R) means that
1ce00 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1ce10 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1ce20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f  irtual table sho
1ce30 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68  uld return to wh
1ce40 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20 78  at it was when x
1ce50 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77  Savepoint(X,R) w
1ce60 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
1ce70 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65  last called. The
1ce80 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1ce90 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69  ckTo(X,R) will i
1cea0 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20  nvalidate all.. 
1ceb0 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70         /// savep
1cec0 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20  oints with N>R; 
1ced0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61  none of the inva
1cee0 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73  lided savepoints
1cef0 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1cf00 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63    /// rolled bac
1cf10 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69  k or released wi
1cf20 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e  thout first bein
1cf30 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20  g reinitialized 
1cf40 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20  by a call..     
1cf50 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70     /// to xSavep
1cf60 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74  oint(). A call t
1cf70 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20  o xRelease(X,M) 
1cf80 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20  invalidates all 
1cf90 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20  savepoints..    
1cfa0 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e      /// where N>
1cfb0 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  =M...        ///
1cfc0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1cfd0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1cfe0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f        /// None o
1cff0 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74  f the xSavepoint
1d000 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20  (), xRelease(), 
1d010 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29  or xRollbackTo()
1d020 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20   methods will.. 
1d030 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20         /// ever 
1d040 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74  be called except
1d050 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c   in between call
1d060 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e  s to xBegin() an
1d070 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20  d either..      
1d080 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20    /// xCommit() 
1d090 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d  or xRollback()..
1d0a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d0b0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1d0c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1d0d0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1d0e0 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1d0f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1d100 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1d110 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1d120 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1d130 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1d140 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d150 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1d160 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
1d170 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1d180 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1d190 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e  er identifier un
1d1a0 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68  der which the th
1d1b0 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
1d1c0 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
1d1d0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1d1e0 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65  e should be save
1d1f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d200 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d210 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1d220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1d230 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1d240 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1d250 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1d260 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1d270 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61  iteErrorCode xSa
1d280 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
1d290 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1d2a0 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1d2b0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
1d2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1d2d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1d330 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1d340 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1d350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1d360 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69  se methods provi
1d370 64 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  de the virtual t
1d380 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
1d390 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  ion an..        
1d3a0 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20  /// opportunity 
1d3b0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73  to implement nes
1d3c0 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
1d3d0 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77 61 79  . They are alway
1d3e0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
1d3f0 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c  ptional and will
1d400 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20   only be called 
1d410 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
1d420 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65  n 3.7.7 and late
1d430 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
1d440 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1d450 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1d460 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53       /// When xS
1d470 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73  avepoint(X,N) is
1d480 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69   invoked, that i
1d490 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68  s a signal to th
1d4a0 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  e virtual..     
1d4b0 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74     /// table X t
1d4c0 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61  hat it should sa
1d4d0 76 65 20 69 74 73 20 63 75 72 72 65 6e 74 20 73  ve its current s
1d4e0 74 61 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e  tate as savepoin
1d4f0 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20  t N. A..        
1d500 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63  /// subsequent c
1d510 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
1d520 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68  To(X,R) means th
1d530 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  at the state of 
1d540 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1d550 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
1d560 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20  hould return to 
1d570 77 68 61 74 20 69 74 20 77 61 73 20 77 68 65 6e  what it was when
1d580 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29   xSavepoint(X,R)
1d590 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
1d5a0 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54  / last called. T
1d5b0 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  he call to xRoll
1d5c0 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c  backTo(X,R) will
1d5d0 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d   invalidate all.
1d5e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76  .        /// sav
1d5f0 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52  epoints with N>R
1d600 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  ; none of the in
1d610 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e  valided savepoin
1d620 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  ts will be..    
1d630 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62      /// rolled b
1d640 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20  ack or released 
1d650 77 69 74 68 6f 75 74 20 66 69 72 73 74 20 62 65  without first be
1d660 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65  ing reinitialize
1d670 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20  d by a call..   
1d680 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76       /// to xSav
1d690 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c  epoint(). A call
1d6a0 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d   to xRelease(X,M
1d6b0 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c  ) invalidates al
1d6c0 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20  l savepoints..  
1d6d0 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20        /// where 
1d6e0 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  N>=M...        /
1d6f0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1d700 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1d710 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65          /// None
1d720 20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f 69   of the xSavepoi
1d730 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29  nt(), xRelease()
1d740 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  , or xRollbackTo
1d750 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d  () methods will.
1d760 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65  .        /// eve
1d770 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65  r be called exce
1d780 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61  pt in between ca
1d790 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20  lls to xBegin() 
1d7a0 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20  and either..    
1d7b0 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28      /// xCommit(
1d7c0 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29  ) or xRollback()
1d7d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d7e0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1d7f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1d800 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1d810 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1d820 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1d830 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1d840 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1d850 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1d860 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1d870 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d880 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1d890 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69  m name="iSavepoi
1d8a0 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
1d8b0 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
1d8c0 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64  eger used to ind
1d8d0 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73  icate that any s
1d8e0 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
1d8f0 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
1d900 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
1d910 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1d920 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64  l to this should
1d930 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74   be deleted by t
1d940 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1d950 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1d960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1d970 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1d980 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1d990 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1d9a0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1d9b0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1d9c0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1d9d0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1d9e0 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73  rrorCode xReleas
1d9f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1da00 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1da10 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1da20 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
1da30 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1da40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1da90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1daa0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1dab0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1dac0 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74     /// These met
1dad0 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68 65  hods provide the
1dae0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1daf0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e  mplementation an
1db00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
1db10 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70  portunity to imp
1db20 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72  lement nested tr
1db30 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79  ansactions. They
1db40 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20   are always..   
1db50 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61       /// optiona
1db60 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20  l and will only 
1db70 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c  be called in SQL
1db80 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1db90 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20  7 and later...  
1dba0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1dbb0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1dbc0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1dbd0 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69  // When xSavepoi
1dbe0 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b  nt(X,N) is invok
1dbf0 65 64 2c 20 74 68 61 74 20 69 73 20 61 20 73 69  ed, that is a si
1dc00 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74  gnal to the virt
1dc10 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
1dc20 20 74 61 62 6c 65 20 58 20 74 68 61 74 20 69 74   table X that it
1dc30 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73   should save its
1dc40 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 61   current state a
1dc50 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41  s savepoint N. A
1dc60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
1dc70 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
1dc80 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52   xRollbackTo(X,R
1dc90 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
1dca0 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20   state of the.. 
1dcb0 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
1dcc0 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20  al table should 
1dcd0 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69  return to what i
1dce0 74 20 77 61 73 20 77 68 65 6e 20 78 53 61 76 65  t was when xSave
1dcf0 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a  point(X,R) was..
1dd00 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74          /// last
1dd10 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c   called. The cal
1dd20 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1dd30 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c  (X,R) will inval
1dd40 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20  idate all..     
1dd50 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74     /// savepoint
1dd60 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65  s with N>R; none
1dd70 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65   of the invalide
1dd80 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c  d savepoints wil
1dd90 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  l be..        //
1dda0 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72  / rolled back or
1ddb0 20 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75   released withou
1ddc0 74 20 66 69 72 73 74 20 62 65 69 6e 67 20 72 65  t first being re
1ddd0 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61  initialized by a
1dde0 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
1ddf0 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74  // to xSavepoint
1de00 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52  (). A call to xR
1de10 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61  elease(X,M) inva
1de20 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65  lidates all save
1de30 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  points..        
1de40 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d  /// where N>=M..
1de50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1de60 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1de70 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1de80 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68    /// None of th
1de90 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20  e xSavepoint(), 
1dea0 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78  xRelease(), or x
1deb0 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74  RollbackTo() met
1dec0 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  hods will..     
1ded0 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63     /// ever be c
1dee0 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20  alled except in 
1def0 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f  between calls to
1df00 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69   xBegin() and ei
1df10 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
1df20 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78  / xCommit() or x
1df30 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20  Rollback()...   
1df40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1df50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1df60 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1df70 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1df80 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1df90 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1dfa0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1dfb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1dfc0 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1dfd0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1dfe0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1dff0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1e000 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
1e010 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1e020 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69   is an integer i
1e030 64 65 6e 74 69 66 69 65 72 20 75 73 65 64 20 74  dentifier used t
1e040 6f 20 73 70 65 63 69 66 79 20 61 20 73 70 65 63  o specify a spec
1e050 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20 20 20  ific saved..    
1e060 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20 66 6f      /// state fo
1e070 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
1e080 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 72 65  ble for it to re
1e090 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62 61 63  store itself bac
1e0a0 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20 20  k to, which..   
1e0b0 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20       /// should 
1e0c0 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20 65 66  also have the ef
1e0d0 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69 6e 67  fect of deleting
1e0e0 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61 74 65   all saved state
1e0f0 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20  s with an..     
1e100 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69     /// integer i
1e110 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65  dentifier greate
1e120 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e 65 2e  r than this one.
1e130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e140 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e150 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1e160 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1e170 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1e180 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1e190 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1e1a0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1e1b0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
1e1c0 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
1e1d0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1e1e0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
1e1f0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
1e200 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1e210 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1e220 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
1e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e270 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e280 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d  #region ISQLiteM
1e290 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20 49 6e 74  anagedModule Int
1e2a0 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  erface..    /// 
1e2b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1e2c0 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  // This interfac
1e2d0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 76  e represents a v
1e2e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
1e2f0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74  lementation writ
1e300 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ten in..    /// 
1e310 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20  managed code... 
1e320 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1e330 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  >..    public in
1e340 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4d  terface ISQLiteM
1e350 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a 20 20  anagedModule..  
1e360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    {..        ///
1e370 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1e380 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
1e390 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1e3a0 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76  schema for the v
1e3b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
1e3c0 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   been..        /
1e3d0 2f 2f 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  // declared...  
1e3e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1e3f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f  ary>..        bo
1e400 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20 67 65  ol Declared { ge
1e410 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t; }....        
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e470 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1e480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
1e490 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  turns the name o
1e4a0 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 73 20  f the module as 
1e4b0 69 74 20 77 61 73 20 72 65 67 69 73 74 65 72 65  it was registere
1e4c0 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
1e4d0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
1e4e0 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
1e4f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1e500 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 73 74  ary>..        st
1e510 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b  ring Name { get;
1e520 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e570 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1e590 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1e5a0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1e5b0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1e5c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1e5d0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1e5e0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1e5f0 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
1e600 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1e610 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1e620 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1e630 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f   name="connectio
1e640 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n">..        ///
1e650 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1e660 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1e670 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1e680 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20  ance associated 
1e690 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
1e6a0 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
1e6b0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1e6c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1e6d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e6e0 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61  ame="pClientData
1e6f0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1e700 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72 2d  The native user-
1e710 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73  data pointer ass
1e720 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
1e730 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74 20  s module, as it 
1e740 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  was..        ///
1e750 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
1e760 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
1e770 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e 61  rary when the na
1e780 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74  tive module inst
1e790 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1e7a0 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a  / was created...
1e7b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e7c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e7d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
1e7e0 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20  rguments">..    
1e7f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
1e800 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62 61 73  le name, databas
1e810 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c 20  e name, virtual 
1e820 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64 20  table name, and 
1e830 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20 20  all other..     
1e840 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73     /// arguments
1e850 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 43   passed to the C
1e860 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
1e870 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
1e880 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1e890 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1e8a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1e8b0 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1e8c0 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
1e8d0 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
1e8e0 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
1e8f0 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
1e900 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e910 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1e920 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1e930 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1e940 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
1e950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
1e960 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1e970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1e980 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1e990 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1e9a0 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  error">..       
1e9b0 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
1e9c0 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
1e9d0 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1e9e0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
1e9f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
1ea00 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  /// message...  
1ea10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1ea20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1ea30 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1ea40 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1ea50 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1ea60 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1ea70 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1ea80 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1ea90 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1eab0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
1eac0 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20  nection,  /* in 
1ead0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1eae0 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
1eaf0 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ta,           /*
1eb00 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1eb10 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
1eb20 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20  uments,         
1eb30 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1eb40 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
1eb50 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1eb60 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d  able, /* out */.
1eb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1eb80 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20   string error   
1eb90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1eba0 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
1ebb0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ec10 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1ec20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1ec30 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1ec40 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1ec50 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1ec60 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1ec70 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1ec80 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
1ec90 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1eca0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1ecb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ecc0 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63  ram name="connec
1ecd0 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20  tion">..        
1ece0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1ecf0 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
1ed00 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
1ed10 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1ed20 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
1ed30 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
1ed40 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1ed50 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1ed60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1ed70 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44  m name="pClientD
1ed80 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
1ed90 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75 73  // The native us
1eda0 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20  er-data pointer 
1edb0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1edc0 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20  this module, as 
1edd0 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  it was..        
1ede0 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20  /// provided to 
1edf0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1ee00 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74 68 65  library when the
1ee10 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69   native module i
1ee20 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
1ee30 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64   /// was created
1ee40 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ee50 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ee60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ee70 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20  ="arguments">.. 
1ee80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
1ee90 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61  odule name, data
1eea0 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75  base name, virtu
1eeb0 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61  al table name, a
1eec0 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20  nd all other..  
1eed0 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65        /// argume
1eee0 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
1eef0 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
1ef00 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
1ef10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ef20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ef30 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ef40 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1ef50 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1ef60 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1ef70 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1ef80 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1ef90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1efa0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1efb0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
1efc0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1efd0 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
1efe0 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
1eff0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1f000 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1f010 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1f020 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f030 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
1f040 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69      /// Upon fai
1f050 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d  lure, this param
1f060 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1f070 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1f080 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
1f090 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d     /// message..
1f0a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1f0b0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1f0c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1f0d0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1f0e0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1f0f0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1f100 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1f110 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1f120 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63  ErrorCode Connec
1f130 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1f140 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1f150 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a   connection,  /*
1f160 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1f170 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65      IntPtr pClie
1f180 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20  ntData,         
1f190 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1f1a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
1f1b0 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20   arguments,     
1f1c0 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1f1e0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1f1f0 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74  le table, /* out
1f200 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f210 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1f220 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r              /
1f230 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
1f240 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1f250 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f2a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1f2b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1f2c0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1f2d0 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1f2e0 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1f2f0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1f300 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1f310 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
1f320 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  x" /> method... 
1f330 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1f340 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1f350 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f360 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1f370 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1f380 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1f390 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1f3a0 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1f3b0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1f3c0 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
1f3d0 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1f3e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1f3f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1f400 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
1f410 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
1f420 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f430 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
1f440 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1f450 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74  containing all t
1f460 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1f470 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e 70  data for the inp
1f480 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20  uts and outputs 
1f490 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64 65  relating to inde
1f4a0 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20  x selection...  
1f4b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1f4c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1f4d0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1f4e0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1f4f0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1f500 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1f510 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1f520 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1f530 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65 78  orCode BestIndex
1f540 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1f550 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1f560 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a  e table, /* in *
1f570 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
1f580 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
1f590 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20           /* in, 
1f5a0 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1f5b0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1f5c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f600 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f610 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1f620 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f630 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1f640 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1f650 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1f660 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1f670 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1f680 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
1f690 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1f6a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1f6b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1f6c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1f6d0 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1f6e0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1f6f0 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1f700 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1f710 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1f720 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1f730 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
1f740 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1f750 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f760 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1f770 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f780 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1f790 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1f7a0 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1f7b0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1f7c0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1f7d0 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28  Code Disconnect(
1f7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1f7f0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1f800 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
1f810 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1f820 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f870 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1f880 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1f890 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1f8a0 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1f8b0 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1f8c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1f8d0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1f8e0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44  eNativeModule.xD
1f8f0 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f  estroy" /> metho
1f900 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1f910 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1f920 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1f930 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1f940 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1f950 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1f960 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1f970 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1f980 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1f990 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1f9a0 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1f9b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f9c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1f9d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1f9e0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1f9f0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1fa00 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1fa10 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1fa20 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1fa30 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72  eErrorCode Destr
1fa40 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
1fa50 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1fa60 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
1fa70 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fa80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fae0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1faf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1fb00 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1fb10 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1fb20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1fb30 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1fb40 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1fb50 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f  .xOpen" /> metho
1fb60 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1fb70 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1fb80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1fb90 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1fba0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1fbb0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1fbc0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1fbd0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1fbe0 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1fbf0 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1fc00 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1fc10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fc20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1fc30 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1fc40 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1fc50 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1fc60 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1fc70 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1fc80 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1fc90 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1fca0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1fcb0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1fcc0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1fcd0 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1fce0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
1fcf0 20 77 69 74 68 20 74 68 65 20 6e 65 77 6c 79 20   with the newly 
1fd00 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74  opened virtual t
1fd10 61 62 6c 65 20 63 75 72 73 6f 72 2e 0d 0a 20 20  able cursor...  
1fd20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1fd30 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1fd40 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1fd50 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1fd60 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1fd70 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1fd80 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1fd90 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1fda0 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20  orCode Open(..  
1fdb0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1fdc0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1fdd0 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le,           /*
1fde0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1fdf0 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
1fe00 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1fe10 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20 2a   cursor /* out *
1fe20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1fe30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fe90 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1fea0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1feb0 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1fec0 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1fed0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1fee0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1fef0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1ff00 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
1ff10 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1ff20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1ff30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ff40 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1ff50 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1ff60 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1ff70 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1ff80 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1ff90 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1ffa0 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1ffb0 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1ffc0 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1ffd0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1ffe0 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1fff0 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
20000 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
20010 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
20020 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
20030 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
20040 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
20050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20060 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20070 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
20080 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20  e Close(..      
20090 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
200a0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
200b0 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ursor /* in */..
200c0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
200d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
20130 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
20140 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
20150 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
20160 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
20170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20180 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
20190 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
201a0 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
201b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
201c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
201d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
201e0 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
201f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
20200 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
20210 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
20220 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
20230 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
20240 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
20250 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
20260 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
20270 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
20280 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
20290 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
202a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
202b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
202c0 6e 61 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65  name="indexNumbe
202d0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
202e0 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
202f0 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
20300 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
20310 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20320 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
20330 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
20340 3d 22 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d  ="indexString">.
20350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72  .        /// Str
20360 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
20370 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
20380 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
20390 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
203a0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
203b0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
203c0 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  lues">..        
203d0 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63  /// The values c
203e0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
203f0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
20400 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
20410 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
20420 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
20430 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
20440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
20450 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
20460 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
20470 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
20480 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
20490 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
204a0 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
204b0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
204c0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
204d0 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  r, /* in */..   
204e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
204f0 65 78 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20  exNumber,       
20500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
20510 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
20520 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
20530 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
20540 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
20550 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
20560 75 65 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20  ue[] values     
20570 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
20580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
20590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
205f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20600 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
20610 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
20620 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
20630 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
20640 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
20650 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
20660 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Next" /> method.
20670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20680 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
20690 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
206a0 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
206b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
206c0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
206d0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
206e0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
206f0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
20700 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
20710 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
20720 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
20730 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
20740 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
20750 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
20760 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
20770 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
20780 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
20790 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
207a0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
207b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
207c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
207d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
207e0 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
207f0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
20800 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
20810 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  or /* in */..   
20820 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
20830 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
20890 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
208a0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
208b0 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
208c0 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
208d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
208e0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
208f0 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20  iveModule.xEof" 
20900 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
20910 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20920 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
20930 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
20940 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
20950 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
20960 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
20970 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
20980 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
20990 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
209a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
209b0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
209c0 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
209d0 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
209e0 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
209f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
20a00 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20a10 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
20a20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
20a30 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72 6f  ro if no more ro
20a40 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ws are available
20a50 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  ; zero otherwise
20a60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20a70 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
20a80 20 20 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20 20     bool Eof(..  
20a90 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
20aa0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
20ab0 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20  or cursor /* in 
20ac0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
20ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20b30 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
20b40 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
20b50 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
20b60 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
20b70 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
20b80 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
20b90 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
20ba0 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
20bb0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
20bc0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
20bd0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
20be0 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
20bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20c00 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
20c10 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
20c20 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
20c30 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
20c40 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
20c50 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
20c60 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
20c70 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
20c80 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
20c90 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
20ca0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
20cb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
20cc0 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
20cd0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
20ce0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
20cf0 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 22 20 2f  SQLiteContext" /
20d00 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
20d10 65 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  e to be used for
20d20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
20d30 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63  turning the spec
20d40 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
20d50 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ue to the SQLite
20d60 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
20d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
20d80 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
20d90 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
20da0 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
20db0 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61 73  /// The zero-bas
20dc0 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70  ed index corresp
20dd0 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f  onding to the co
20de0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  lumn containing 
20df0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
20e00 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74   value to be ret
20e10 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
20e20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
20e30 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
20e40 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
20e50 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
20e60 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
20e70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
20e80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20e90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
20ea0 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20   Column(..      
20eb0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
20ec0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
20ed0 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  ursor, /* in */.
20ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
20ef0 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  iteContext conte
20f00 78 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  xt,           /*
20f10 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
20f20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 20 20      int index   
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
20f50 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
20f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
20fc0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
20fd0 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
20fe0 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
20ff0 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
21000 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
21010 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
21020 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
21030 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  Id" /> method...
21040 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
21050 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
21060 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
21070 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
21080 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
21090 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
210a0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
210b0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
210c0 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
210d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
210e0 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
210f0 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
21100 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
21110 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
21120 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
21130 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
21140 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
21150 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
21160 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
21170 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
21180 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
21190 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
211a0 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
211b0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
211c0 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
211d0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
211e0 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
211f0 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
21200 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
21210 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
21220 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
21230 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
21240 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
21250 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
21260 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21270 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
21280 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d  rrorCode RowId(.
21290 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
212a0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
212b0 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a  ursor cursor, /*
212c0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
212d0 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
212e0 49 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Id              
212f0 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
21300 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
21310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
21370 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
21380 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
21390 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
213a0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
213b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
213c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
213d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
213e0 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
213f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21400 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21410 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21420 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
21430 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
21440 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
21450 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
21460 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
21470 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
21480 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
21490 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
214a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
214b0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
214c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
214d0 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  alues">..       
214e0 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
214f0 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
21500 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a  iteValue" /> obj
21510 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63 6f  ect instances co
21520 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
21530 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f 72    /// the new or
21540 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e   modified column
21550 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e 79 2e   values, if any.
21560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
21570 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
21580 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
21590 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20  "rowId">..      
215a0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
215b0 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
215c0 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
215d0 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
215e0 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20 20  he unique..     
215f0 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72     /// integer r
21600 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  ow identifier fo
21610 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 77  r the row that w
21620 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69 66 20  as inserted, if 
21630 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
21640 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
21650 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
21660 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
21670 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
21680 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
21690 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
216a0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
216b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 55  QLiteErrorCode U
216c0 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
216d0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
216e0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
216f0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
21700 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
21710 5d 20 76 61 6c 75 65 73 2c 20 20 20 20 20 2f 2a  ] values,     /*
21720 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
21730 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
21740 49 64 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  Id            /*
21750 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
21760 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
21770 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
217c0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
217d0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
217e0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
217f0 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
21800 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
21810 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
21820 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
21830 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e  odule.xBegin" />
21840 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
21850 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
21860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21870 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
21880 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21890 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
218a0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
218b0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
218c0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
218d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
218e0 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
218f0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
21900 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
21910 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
21920 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
21930 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
21940 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
21950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
21960 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
21970 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21980 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20   Begin(..       
21990 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
219a0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a  alTable table /*
219b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
219c0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
219d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21a20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
21a30 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21a40 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
21a50 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
21a60 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
21a70 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
21a80 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
21a90 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d  dule.xSync" /> m
21aa0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
21ab0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21ad0 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
21ae0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21af0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
21b00 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
21b10 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
21b20 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
21b30 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
21b40 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
21b50 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
21b60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
21b70 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
21b80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
21b90 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
21ba0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
21bb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
21bc0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
21bd0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
21be0 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
21bf0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
21c00 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
21c10 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
21c20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21c80 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
21c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
21ca0 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
21cb0 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
21cc0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
21cd0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
21ce0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
21cf0 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
21d00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
21d10 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
21d20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
21d30 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
21d40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
21d50 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
21d60 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
21d70 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
21d80 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
21d90 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
21da0 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
21db0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
21dc0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
21dd0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
21de0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
21df0 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
21e00 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
21e10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
21e20 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
21e30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
21e40 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
21e50 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
21e60 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
21e70 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
21e80 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
21e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ed0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21ee0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
21ef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21f00 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
21f10 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
21f20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
21f30 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
21f40 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
21f50 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
21f60 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
21f70 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
21f80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
21f90 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
21fa0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
21fb0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
21fc0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
21fd0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
21fe0 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
21ff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
22000 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
22010 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
22020 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
22030 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
22040 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
22050 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
22060 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
22070 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
22080 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
22090 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
220a0 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20   Rollback(..    
220b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
220c0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
220d0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
220e0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
220f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
22150 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
22160 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
22170 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
22180 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
22190 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
221a0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
221b0 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
221c0 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ction" /> method
221d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
221e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
221f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
22200 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
22210 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
22220 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
22230 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
22240 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
22250 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
22260 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
22270 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
22280 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22290 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
222a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
222b0 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d  argumentCount">.
222c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
222d0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
222e0 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
222f0 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68  tion being sough
22300 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
22310 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
22320 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
22330 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
22340 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
22350 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
22360 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20  being sought... 
22370 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
22380 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
22390 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
223a0 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20  nction">..      
223b0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
223c0 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
223d0 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
223e0 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
223f0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
22400 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
22410 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  eFunction" /> ob
22420 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
22430 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0d 0a 20  sponsible for.. 
22440 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
22450 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63  menting the spec
22460 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d  ified function..
22470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
22480 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
22490 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
224a0 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
224b0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
224c0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
224d0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
224e0 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
224f0 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
22500 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72   /// native user
22510 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
22520 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
22530 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22540 6d 72 65 66 20 6e 61 6d 65 3d 22 66 75 6e 63 74  mref name="funct
22550 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ion" />...      
22560 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
22570 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
22580 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
22590 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
225a0 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e  he specified fun
225b0 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b  ction was found;
225c0 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e   zero otherwise.
225d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
225e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
225f0 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74    bool FindFunct
22600 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
22610 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
22620 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 2f  able table,    /
22630 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
22640 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
22650 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20 20  tCount,         
22660 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
22670 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
22680 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ame,            
22690 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
226a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
226b0 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
226c0 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20 2a  nction, /* out *
226d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
226e0 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
226f0 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20 6f  tData       /* o
22700 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
22710 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
22720 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22770 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
22780 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22790 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
227a0 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
227b0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
227c0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
227d0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
227e0 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
227f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
22800 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
22810 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22820 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
22830 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22840 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
22850 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
22860 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
22870 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
22880 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
22890 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
228a0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
228b0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
228c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
228d0 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d 65 22 3e 0d  name="newName">.
228e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
228f0 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20 74 68   new name for th
22900 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
22910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
22920 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
22930 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
22940 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
22950 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
22960 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
22970 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
22980 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
22990 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d  eErrorCode Renam
229a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
229b0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
229c0 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
229d0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
229e0 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 20  string newName  
229f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
22a00 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
22a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22a70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
22a80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
22a90 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
22aa0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
22ab0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
22ac0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
22ad0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
22ae0 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20  .xSavepoint" /> 
22af0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
22b00 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
22b10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22b20 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
22b30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22b40 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
22b50 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
22b60 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
22b70 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
22b80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
22b90 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
22ba0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
22bb0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
22bc0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
22bd0 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22  name="savepoint"
22be0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22bf0 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65  his is an intege
22c00 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e 64  r identifier und
22c10 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68 65  er which the the
22c20 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f   current state o
22c30 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
22c40 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
22c50 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65 64   should be saved
22c60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22c70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
22c80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
22c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
22ca0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
22cb0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
22cc0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
22cd0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
22ce0 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65  teErrorCode Save
22cf0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
22d00 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
22d10 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
22d20 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
22d30 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
22d40 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t             /*
22d50 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
22d60 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
22d70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22dc0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
22dd0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22de0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
22df0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
22e00 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
22e10 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
22e20 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
22e30 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f  dule.xRelease" /
22e40 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
22e50 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
22e60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22e70 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
22e80 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
22e90 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
22ea0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
22eb0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
22ec0 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
22ed0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
22ee0 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
22ef0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
22f00 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
22f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22f20 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e  m name="savepoin
22f30 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
22f40 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65   This is an inte
22f50 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64 69  ger used to indi
22f60 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73 61  cate that any sa
22f70 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20  ved states with 
22f80 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
22f90 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74  identifier great
22fa0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
22fb0 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64 20   to this should 
22fc0 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  be deleted by th
22fd0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
22fe0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
22ff0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23000 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
23010 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23020 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
23030 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
23040 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
23050 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
23060 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
23070 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28  rorCode Release(
23080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
23090 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
230a0 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
230b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
230c0 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20  t savepoint     
230d0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
230e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
230f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
23150 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
23160 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
23170 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
23180 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
23190 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
231a0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
231b0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
231c0 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
231d0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
231e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
231f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
23200 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
23210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
23220 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
23230 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
23240 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
23250 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
23260 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
23270 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
23280 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
23290 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
232a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
232b0 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e  ame="savepoint">
232c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
232d0 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  is is an integer
232e0 20 69 64 65 6e 74 69 66 69 65 72 20 75 73 65 64   identifier used
232f0 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 73 70   to specify a sp
23300 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20  ecific saved..  
23310 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20        /// state 
23320 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
23330 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20  table for it to 
23340 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62  restore itself b
23350 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20  ack to, which.. 
23360 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c         /// shoul
23370 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20  d also have the 
23380 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69  effect of deleti
23390 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61  ng all saved sta
233a0 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
233b0 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
233c0 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
233d0 74 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e  ter than this on
233e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
233f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
23400 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
23410 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
23420 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
23430 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
23440 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
23450 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
23460 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c  iteErrorCode Rol
23470 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
23480 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
23490 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
234a0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
234b0 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f        int savepo
234c0 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  int             
234d0 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
234e0 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d        );..    }.
234f0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
23500 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23550 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
23560 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53  n SQLiteMemory S
23570 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20  tatic Class..   
23580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23590 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
235a0 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 74  ss contains stat
235b0 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20  ic methods that 
235c0 61 72 65 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f  are used to allo
235d0 63 61 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6d  cate,..    /// m
235e0 61 6e 69 70 75 6c 61 74 65 2c 20 61 6e 64 20 66  anipulate, and f
235f0 72 65 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72  ree native memor
23600 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
23610 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
23620 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
23630 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
23640 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
23650 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f  class SQLiteMemo
23660 72 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ry..    {..     
23670 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
23680 74 65 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41  te Data..#if TRA
23690 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d  CK_MEMORY_BYTES.
236a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
236b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
236c0 2f 2f 2f 20 54 68 69 73 20 6f 62 6a 65 63 74 20  /// This object 
236d0 69 6e 73 74 61 6e 63 65 20 69 73 20 75 73 65 64  instance is used
236e0 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69 7a 65 20   to synchronize 
236f0 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 6f 74  access to the ot
23700 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
23710 20 73 74 61 74 69 63 20 66 69 65 6c 64 73 20 6f   static fields o
23720 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
23730 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
23740 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
23750 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
23760 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
23770 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d  new object();...
23780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
23790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
237e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
237f0 20 20 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61 6c     /// The total
23800 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
23810 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
23820 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  tes allocated by
23830 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
23840 2f 2f 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  // class using t
23850 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
23860 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
23870 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
23880 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23890 20 73 74 61 74 69 63 20 69 6e 74 20 62 79 74 65   static int byte
238a0 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d 0a 20  sAllocated;.... 
238b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23900 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
23910 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
23920 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d   /// The maximum
23930 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
23940 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
23950 74 65 73 20 65 76 65 72 20 61 6c 6c 6f 63 61 74  tes ever allocat
23960 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f  ed by..        /
23970 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20 75 73  // this class us
23980 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
23990 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
239a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
239b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
239c0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
239d0 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c   maximumBytesAll
239e0 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69 66 0d  ocated;..#endif.
239f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23a00 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
23a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23a60 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f 72 79    #region Memory
23a70 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65 6c 70   Allocation Help
23a80 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
23a90 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
23aa0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
23ab0 6c 6c 6f 63 61 74 65 73 20 61 74 20 6c 65 61 73  llocates at leas
23ac0 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
23ad0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
23ae0 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79  of native memory
23af0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
23b00 61 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  a the SQLite cor
23b10 65 20 6c 69 62 72 61 72 79 20 73 71 6c 69 74 65  e library sqlite
23b20 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74  3_malloc() funct
23b30 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 0d  ion and returns.
23b40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
23b50 20 72 65 73 75 6c 74 69 6e 67 20 6e 61 74 69 76   resulting nativ
23b60 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20  e pointer...    
23b70 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23b80 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23b90 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a  <param name="siz
23ba0 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
23bb0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
23bc0 79 74 65 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ytes to allocate
23bd0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23be0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
23bf0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
23c00 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
23c10 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
23c20 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
23c30 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79 20  block of memory 
23c40 6f 66 20 61 74 20 6c 65 61 73 74 20 74 68 65 0d  of at least the.
23c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65  .        /// spe
23c60 63 69 66 69 65 64 20 73 69 7a 65 20 2d 4f 52 2d  cified size -OR-
23c70 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
23c80 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20 74  tr.Zero" /> if t
23c90 68 65 20 6d 65 6d 6f 72 79 20 63 6f 75 6c 64 0d  he memory could.
23ca0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74  .        /// not
23cb0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 0d 0a   be allocated...
23cc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
23cd0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
23ce0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
23cf0 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e  tPtr Allocate(in
23d00 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20 20 20  t size)..       
23d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23d20 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d  IntPtr pMemory =
23d30 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
23d40 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c  hods.sqlite3_mal
23d50 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69  loc(size);....#i
23d60 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  f TRACK_MEMORY_B
23d70 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20  YTES..          
23d80 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d    if (pMemory !=
23d90 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
23da0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
23dc0 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69  t blockSize = Si
23dd0 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a  ze(pMemory);....
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20  if (blockSize > 
23e00 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
23e10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23e20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
23e30 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23e60 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73             bytes
23e70 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f  Allocated += blo
23e80 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  ckSize;....     
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 20 69 66 20 28 62 79 74 65 73 41 6c 6c 6f     if (bytesAllo
23eb0 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42  cated > maximumB
23ec0 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a  ytesAllocated)..
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69              maxi
23ef0 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65  mumBytesAllocate
23f00 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61 74  d = bytesAllocat
23f10 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
23f20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23f40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
23f50 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
23f60 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f      return pMemo
23f70 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ry;..        }..
23f80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
23fe0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
23ff0 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
24000 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 63 74   returns the act
24010 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20  ual size of the 
24020 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
24030 20 62 6c 6f 63 6b 20 74 68 61 74 0d 0a 20 20 20   block that..   
24040 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 70 72 65       /// was pre
24050 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
24060 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63   from the <see c
24070 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f  ref="Allocate" /
24080 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
24090 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
240a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
240b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d 65 6d  param name="pMem
240c0 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ory">..        /
240d0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
240e0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d  inter to the mem
240f0 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f  ory block previo
24100 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
24110 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
24120 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41  /// <see cref="A
24130 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
24140 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
24150 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
24160 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
24170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
24180 65 20 61 63 74 75 61 6c 20 73 69 7a 65 2c 20 69  e actual size, i
24190 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
241a0 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 73 70 65  memory block spe
241b0 63 69 66 69 65 64 20 76 69 61 20 74 68 65 0d 0a  cified via the..
241c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69          /// nati
241d0 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20  ve pointer...   
241e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
241f0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
24200 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 53  lic static int S
24210 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ize(IntPtr pMemo
24220 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
24230 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
24240 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
24250 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
24260 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
24270 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65  ite3_malloc_size
24280 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79  _interop(pMemory
24290 29 3b 0d 0a 23 65 6c 69 66 20 54 52 41 43 4b 5f  );..#elif TRACK_
242a0 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20  MEMORY_BYTES..  
242b0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
242c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43            // HAC
242d0 4b 3a 20 4f 6b 2c 20 77 65 20 63 61 6e 6e 6f 74  K: Ok, we cannot
242e0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73   determine the s
242f0 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
24300 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20 20 20  y block;..      
24310 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
24320 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 74  herefore, just t
24330 72 61 63 6b 20 6e 75 6d 62 65 72 20 6f 66 20 61  rack number of a
24340 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 6e 73 74 65  llocations inste
24350 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad...           
24360 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
24370 20 72 65 74 75 72 6e 20 28 70 4d 65 6d 6f 72 79   return (pMemory
24380 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
24390 20 3f 20 31 20 3a 20 30 3b 0d 0a 23 65 6c 73 65   ? 1 : 0;..#else
243a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
243b0 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
243c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
243d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
243e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24420 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
24430 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
24440 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65 6d 6f  /// Frees a memo
24450 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75  ry block previou
24460 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
24470 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  m the..        /
24480 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c  // <see cref="Al
24490 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  locate" /> metho
244a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
244b0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
244c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
244d0 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a  ame="pMemory">..
244e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
244f0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
24500 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f  o the memory blo
24510 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62  ck previously ob
24520 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
24530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
24540 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65  e cref="Allocate
24550 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
24560 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
24570 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
24580 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 46  ic static void F
24590 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ree(IntPtr pMemo
245a0 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
245b0 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  #if TRACK_MEMORY
245c0 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20  _BYTES..        
245d0 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20      if (pMemory 
245e0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
245f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24610 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20  int blockSize = 
24620 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a  Size(pMemory);..
24630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24640 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20    if (blockSize 
24650 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
24660 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
24680 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
246c0 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20 62  esAllocated -= b
246d0 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20 20  lockSize;..     
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
246f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24700 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24710 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
24720 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
24730 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
24740 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65 6d 6f  lite3_free(pMemo
24750 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
24760 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
24770 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
24780 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
24790 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
247e0 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
247f0 69 74 65 53 74 72 69 6e 67 20 53 74 61 74 69 63  iteString Static
24800 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
24810 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
24820 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f  // This class co
24830 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65  ntains static me
24840 74 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 75  thods that are u
24850 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68  sed to deal with
24860 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f   native..    ///
24870 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
24880 69 6e 74 65 72 73 20 74 6f 20 62 65 20 75 73 65  inters to be use
24890 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
248a0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
248b0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
248c0 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
248d0 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
248e0 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20  QLiteString..   
248f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
24900 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
24910 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tants..        /
24920 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
24930 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
24940 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 6f  s the maximum po
24950 73 73 69 62 6c 65 20 6c 65 6e 67 74 68 20 66 6f  ssible length fo
24960 72 20 74 68 65 20 6e 61 74 69 76 65 20 55 54 46  r the native UTF
24970 2d 38 20 65 6e 63 6f 64 65 64 0d 0a 20 20 20 20  -8 encoded..    
24980 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
24990 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51  used with the SQ
249a0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
249b0 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
249c0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
249d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
249e0 69 63 20 69 6e 74 20 54 68 69 72 74 79 42 69 74  ic int ThirtyBit
249f0 73 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b 0d  s = 0x3fffffff;.
24a00 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
24a60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
24a70 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
24a80 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
24a90 45 6e 63 6f 64 69 6e 67 22 20 2f 3e 20 6f 62 6a  Encoding" /> obj
24aa0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65  ect instance use
24ab0 64 20 74 6f 20 68 61 6e 64 6c 65 0d 0a 20 20 20  d to handle..   
24ac0 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73       /// convers
24ad0 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f 20 55 54 46  ions from/to UTF
24ae0 2d 38 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  -8...        ///
24af0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
24b00 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24b10 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63  tic readonly Enc
24b20 6f 64 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69  oding Utf8Encodi
24b30 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54  ng = Encoding.UT
24b40 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  F8;..        #en
24b50 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
24b60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24bb0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
24bc0 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c  F-8 Encoding Hel
24bd0 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
24be0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
24bf0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
24c00 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
24c10 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73  cified managed s
24c20 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 55  tring into the U
24c30 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
24c40 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  d..        /// r
24c50 65 74 75 72 6e 73 20 74 68 65 20 61 72 72 61 79  eturns the array
24c60 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
24c70 6e 69 6e 67 20 69 74 73 20 72 65 70 72 65 73 65  ning its represe
24c80 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 61 74 0d  ntation in that.
24c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 63  .        /// enc
24ca0 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  oding...        
24cb0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
24cc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
24cd0 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
24ce0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
24cf0 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  e managed string
24d00 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
24d10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
24d20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
24d30 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
24d40 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
24d50 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
24d60 6e 69 6e 67 20 74 68 65 20 72 65 70 72 65 73 65  ning the represe
24d70 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
24d80 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20  anaged..        
24d90 2f 2f 2f 20 73 74 72 69 6e 67 20 69 6e 20 74 68  /// string in th
24da0 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  e UTF-8 encoding
24db0 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61   or null upon fa
24dc0 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
24dd0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
24de0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
24df0 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47 65 74  tatic byte[] Get
24e00 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72  Utf8BytesFromStr
24e10 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
24e20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    string value..
24e30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
24e40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24e50 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
24e60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24e70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24e80 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
24e90 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66        return Utf
24ea0 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79 74  8Encoding.GetByt
24eb0 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  es(value);..    
24ec0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24ed0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24f20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
24f30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
24f40 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63  onverts the spec
24f50 69 66 69 65 64 20 61 72 72 61 79 20 6f 66 20 62  ified array of b
24f60 79 74 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e  ytes representin
24f70 67 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68  g a string in th
24f80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  e..        /// U
24f90 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
24fa0 64 20 72 65 74 75 72 6e 73 20 61 20 6d 61 6e 61  d returns a mana
24fb0 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  ged string...   
24fc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
24fd0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
24fe0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 79   <param name="by
24ff0 74 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tes">..        /
25000 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
25010 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74  bytes to convert
25020 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25030 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
25040 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
25050 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25060 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f  managed string o
25070 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
25080 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
25090 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
250a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
250b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
250c0 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
250d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
250e0 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20  byte[] bytes..  
250f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25110 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d      if (bytes ==
25120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25130 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
25140 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ull;....#if !PLA
25150 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
25160 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
25170 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38 45      return Utf8E
25180 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e  ncoding.GetStrin
25190 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65  g(bytes);..#else
251a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
251b0 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
251c0 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
251d0 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67  s, 0, bytes.Leng
251e0 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  th);..#endif..  
251f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25200 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
25210 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25260 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
25270 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48  n UTF-8 String H
25280 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
25290 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
252a0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
252b0 2f 20 50 72 6f 62 65 73 20 61 20 6e 61 74 69 76  / Probes a nativ
252c0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73  e pointer to a s
252d0 74 72 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46  tring in the UTF
252e0 2d 38 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  -8 encoding for 
252f0 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  its..        ///
25300 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e 55 4c   terminating NUL
25310 20 63 68 61 72 61 63 74 65 72 2c 20 77 69 74 68   character, with
25320 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
25330 20 6c 65 6e 67 74 68 20 6c 69 6d 69 74 2e 0d 0a   length limit...
25340 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
25350 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
25360 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
25370 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  "pValue">..     
25380 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
25390 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
253a0 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e   string pointer.
253b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
253c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
253d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
253e0 22 6c 69 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20  "limit">..      
253f0 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75    /// The maximu
25400 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  m length of the 
25410 6e 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69  native string, i
25420 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20  n bytes...      
25430 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
25440 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
25450 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
25460 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
25470 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
25480 6e 67 2c 20 69 6e 20 62 79 74 65 73 20 2d 4f 52  ng, in bytes -OR
25490 2d 20 7a 65 72 6f 20 69 66 20 74 68 65 20 6c 65  - zero if the le
254a0 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ngth..        //
254b0 2f 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 64  / could not be d
254c0 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20  etermined...    
254d0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
254e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
254f0 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 50 72  ic static int Pr
25500 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65  obeForUtf8ByteLe
25510 6e 67 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20  ngth(..         
25520 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
25530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
25540 6e 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20 20  nt limit..      
25550 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25570 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d  int length = 0;.
25580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25590 66 20 28 28 70 56 61 6c 75 65 20 21 3d 20 49 6e  f ((pValue != In
255a0 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28 6c  tPtr.Zero) && (l
255b0 69 6d 69 74 20 3e 20 30 29 29 0d 0a 20 20 20 20  imit > 0))..    
255c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
255d0 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20             do.. 
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
255f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25600 20 20 20 20 20 20 69 66 20 28 4d 61 72 73 68 61        if (Marsha
25610 6c 2e 52 65 61 64 42 79 74 65 28 70 56 61 6c 75  l.ReadByte(pValu
25620 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  e, length) == 0)
25630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25640 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
25650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25660 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67          if (leng
25670 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20 20  th >= limit)..  
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a        break;....
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256b0 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a 20      length++;.. 
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
256d0 20 77 68 69 6c 65 20 28 74 72 75 65 29 3b 0d 0a   while (true);..
256e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
256f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
25700 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20  urn length;..   
25710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25720 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25760 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25770 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
25780 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
25790 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
257a0 63 69 66 69 65 64 20 6e 61 74 69 76 65 20 4e 55  cified native NU
257b0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
257c0 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
257d0 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  r..        /// i
257e0 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74  nto a managed st
257f0 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ring...        /
25800 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
25810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
25820 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e  m name="pValue">
25830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
25840 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  e native NUL-ter
25850 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
25860 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20  ring pointer... 
25870 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
25880 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
25890 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
258a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
258b0 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
258c0 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
258d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
258e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
258f0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
25900 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
25910 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
25920 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25930 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   pValue..       
25940 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25950 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
25960 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d  eturn StringFrom
25970 55 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75  Utf8IntPtr(pValu
25980 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25990 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74 66 38      ProbeForUtf8
259a0 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61 6c 75  ByteLength(pValu
259b0 65 2c 20 54 68 69 72 74 79 42 69 74 73 29 29 3b  e, ThirtyBits));
259c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
259d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
259e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25a20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
25a30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
25a40 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68   /// Converts th
25a50 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69  e specified nati
25a60 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ve UTF-8 string 
25a70 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 20 73  pointer of the s
25a80 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20  pecified..      
25a90 20 20 2f 2f 2f 20 6c 65 6e 67 74 68 20 69 6e 74    /// length int
25aa0 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72 69  o a managed stri
25ab0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ng...        ///
25ac0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
25ad0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
25ae0 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a  name="pValue">..
25af0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
25b00 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73 74 72  native UTF-8 str
25b10 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20  ing pointer...  
25b20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
25b30 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
25b40 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
25b50 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
25b60 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
25b70 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
25b80 6e 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ng, in bytes... 
25b90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
25ba0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
25bb0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
25bc0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
25bd0 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
25be0 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
25bf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
25c00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
25c10 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
25c20 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
25c30 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
25c40 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25c50 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20   pValue,..      
25c60 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
25c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25c80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25c90 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
25ca0 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
25cb0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
25cc0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
25cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25ce0 69 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d  if (length > 0).
25cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d10 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e  byte[] bytes = n
25d20 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b  ew byte[length];
25d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25d40 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
25d50 28 70 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  (pValue, bytes, 
25d60 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  0, length);.... 
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25d80 65 74 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46  eturn GetStringF
25d90 72 6f 6d 55 74 66 38 42 79 74 65 73 28 62 79 74  romUtf8Bytes(byt
25da0 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
25db0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25dc0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
25dd0 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20  .Empty;..       
25de0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25e40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
25e50 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
25e60 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66 69  erts the specifi
25e70 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  ed managed strin
25e80 67 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20  g into a native 
25e90 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
25ea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
25eb0 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
25ec0 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 6f 62   using memory ob
25ed0 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20  tained from the 
25ee0 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
25ef0 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79       /// library
25f00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25f10 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
25f20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
25f30 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
25f40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
25f50 61 67 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63  aged string to c
25f60 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
25f70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25f80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
25f90 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
25fa0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c  / The native NUL
25fb0 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
25fc0 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
25fd0 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
25fe0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
25ff0 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 75 70 6f 6e  tr.Zero" /> upon
26000 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
26010 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
26020 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
26030 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
26040 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
26050 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
26060 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d     string value.
26070 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
26080 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26090 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
260a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
260b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
260c0 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
260d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
260e0 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20 49 6e  tPtr result = In
260f0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
26100 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
26110 79 74 65 73 20 3d 20 47 65 74 55 74 66 38 42 79  ytes = GetUtf8By
26120 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
26130 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
26140 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
26150 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26160 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26170 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
26180 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
26190 6c 65 6e 67 74 68 20 3d 20 62 79 74 65 73 2e 4c  length = bytes.L
261a0 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
261b0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
261c0 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f  QLiteMemory.Allo
261d0 63 61 74 65 28 6c 65 6e 67 74 68 20 2b 20 31 29  cate(length + 1)
261e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
261f0 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49   if (result == I
26200 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26220 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
26230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26240 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 62 79 74  Marshal.Copy(byt
26250 65 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c  es, 0, result, l
26260 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20  ength);..       
26270 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
26280 74 65 42 79 74 65 28 72 65 73 75 6c 74 2c 20 6c  teByte(result, l
26290 65 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20  ength, 0);....  
262a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
262b0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
262c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
262d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
262e0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26330 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
26340 46 2d 38 20 53 74 72 69 6e 67 20 41 72 72 61 79  F-8 String Array
26350 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
26360 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
26370 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26380 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c  /// Converts a l
26390 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
263a0 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
263b0 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
263c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
263d0 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20 61 6e  pointers into an
263e0 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65   array of manage
263f0 64 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20  d strings...    
26400 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26410 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26420 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
26430 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
26440 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   The number of e
26450 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 6c  lements in the l
26460 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
26470 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
26480 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  /// NUL-terminat
26490 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
264a0 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20  pointers...     
264b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
264c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
264d0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
264e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
264f0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
26500 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c 20   to the logical 
26510 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20  array of native 
26520 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
26530 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
26540 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
26550 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  s to convert... 
26560 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
26570 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
26580 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
26590 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
265a0 79 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72  y of managed str
265b0 69 6e 67 73 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ings or null upo
265c0 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
265d0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
265e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
265f0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
26600 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79 46 72  [] StringArrayFr
26610 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74  omUtf8SizeAndInt
26620 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
26630 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
26640 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26650 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20  argv..          
26660 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
26670 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26680 61 72 67 63 20 3c 20 30 29 0d 0a 20 20 20 20 20  argc < 0)..     
26690 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
266a0 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
266b0 20 20 20 20 20 20 20 69 66 20 28 61 72 67 76 20         if (argv 
266c0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
266d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
266e0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
266f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26700 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  ing[] result = n
26710 65 77 20 73 74 72 69 6e 67 5b 61 72 67 63 5d 3b  ew string[argc];
26720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26730 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
26740 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d   0, offset = 0;.
26750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26760 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73       index < res
26770 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20  ult.Length;..   
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74   index++, offset
267a0 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29   += IntPtr.Size)
267b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
267c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267d0 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d 20 53   IntPtr pArg = S
267e0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
267f0 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20 6f 66  dIntPtr(argv, of
26800 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
26810 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
26820 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72 67 20  [index] = (pArg 
26830 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
26840 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
26850 20 20 20 20 20 20 20 53 74 72 69 6e 67 46 72 6f         StringFro
26860 6d 55 74 66 38 49 6e 74 50 74 72 28 70 41 72 67  mUtf8IntPtr(pArg
26870 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
26880 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
268a0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
268b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26900 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26910 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
26920 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65         /// Conve
26930 72 74 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20  rts an array of 
26940 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
26950 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  into an array of
26960 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
26970 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61   /// NUL-termina
26980 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
26990 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20   pointers...    
269a0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
269b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
269c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
269d0 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ues">..        /
269e0 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
269f0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
26a00 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
26a10 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
26a20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
26a30 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
26a40 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
26a50 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65  of native NUL-te
26a60 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
26a70 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20 6f  tring pointers o
26a80 72 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  r null..        
26a90 2f 2f 2f 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  /// upon failure
26aa0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
26ab0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
26ac0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
26ad0 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e   IntPtr[] Utf8In
26ae0 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72  tPtrArrayFromStr
26af0 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20  ingArray(..     
26b00 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
26b10 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  values..        
26b20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26b40 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c   (values == null
26b50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26b60 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
26b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
26b80 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d  ntPtr[] result =
26b90 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75   new IntPtr[valu
26ba0 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20  es.Length];.... 
26bb0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
26bc0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
26bd0 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65  ndex < result.Le
26be0 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
26c10 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
26c20 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65  ring(values[inde
26c30 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x]);....        
26c40 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
26c50 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
26c60 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26c70 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
26c80 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26ce0 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
26cf0 65 42 79 74 65 73 20 53 74 61 74 69 63 20 43 6c  eBytes Static Cl
26d00 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
26d10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
26d20 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74 61  This class conta
26d30 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68 6f  ins static metho
26d40 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ds that are used
26d50 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6e 61   to deal with na
26d60 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 70 6f  tive..    /// po
26d70 69 6e 74 65 72 73 20 74 6f 20 6d 65 6d 6f 72 79  inters to memory
26d80 20 62 6c 6f 63 6b 73 20 74 68 61 74 20 6c 6f 67   blocks that log
26d90 69 63 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 61  ically contain a
26da0 72 72 61 79 73 20 6f 66 20 62 79 74 65 73 20 74  rrays of bytes t
26db0 6f 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75 73  o be..    /// us
26dc0 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
26dd0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
26de0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
26df0 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
26e00 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
26e10 53 51 4c 69 74 65 42 79 74 65 73 0d 0a 20 20 20  SQLiteBytes..   
26e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
26e30 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20 48  ion Byte Array H
26e40 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
26e50 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
26e60 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
26e70 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74  / Converts a nat
26e80 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  ive pointer to a
26e90 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
26ea0 66 20 62 79 74 65 73 20 6f 66 20 74 68 65 0d 0a  f bytes of the..
26eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
26ec0 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
26ed0 6f 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74 65  o a managed byte
26ee0 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20   array...       
26ef0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
26f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26f10 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
26f20 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
26f30 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
26f40 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61  er to the logica
26f50 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  l array of bytes
26f60 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
26f70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
26f80 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
26f90 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
26fa0 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
26fb0 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 2c 20 69  // The length, i
26fc0 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
26fd0 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66  logical array of
26fe0 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72   bytes to conver
26ff0 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
27000 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27010 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
27020 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
27030 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61 72   managed byte ar
27040 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e  ray or null upon
27050 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
27060 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
27070 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
27080 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20  c static byte[] 
27090 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
270a0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
270b0 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  pValue,..       
270c0 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d       int length.
270d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
270e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
270f0 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
27100 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
27110 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27120 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
27130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27140 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  f (length == 0).
27150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27160 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74 65   return new byte
27170 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
27180 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75 6c      byte[] resul
27190 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e  t = new byte[len
271a0 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
271b0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
271c0 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c 74  y(pValue, result
271d0 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  , 0, length);...
271e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
271f0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
27200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27260 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
27270 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
27280 43 6f 6e 76 65 72 74 73 20 61 20 6d 61 6e 61 67  Converts a manag
27290 65 64 20 62 79 74 65 20 61 72 72 61 79 20 69 6e  ed byte array in
272a0 74 6f 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e  to a native poin
272b0 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61 6c  ter to a logical
272c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
272d0 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d 0a 20  ray of bytes... 
272e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
272f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27300 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
27310 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
27320 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64   /// The managed
27330 20 62 79 74 65 20 61 72 72 61 79 20 74 6f 20 63   byte array to c
27340 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
27350 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27360 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
27370 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
27380 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
27390 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61  nter to a logica
273a0 6c 20 62 79 74 65 20 61 72 72 61 79 20 6f 72 20  l byte array or 
273b0 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
273c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
273d0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
273e0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
273f0 63 20 49 6e 74 50 74 72 20 54 6f 49 6e 74 50 74  c IntPtr ToIntPt
27400 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
27410 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20  byte[] value..  
27420 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27430 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27440 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
27450 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27460 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
27470 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
27480 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
27490 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65  ength = value.Le
274a0 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
274b0 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20       if (length 
274c0 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
274d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
274e0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
274f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
27500 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65   result = SQLite
27510 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
27520 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
27530 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
27540 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  lt == IntPtr.Zer
27550 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
27560 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
27570 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
27580 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
27590 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20 72 65  opy(value, 0, re
275a0 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  sult, length);..
275b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
275c0 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
275d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
275e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
275f0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
27600 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
27610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
27660 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73 68  gion SQLiteMarsh
27670 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  al Static Class.
27680 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
27690 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
276a0 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20   class contains 
276b0 73 74 61 74 69 63 20 6d 65 74 68 6f 64 73 20 74  static methods t
276c0 68 61 74 20 61 72 65 20 75 73 65 64 20 74 6f 20  hat are used to 
276d0 70 65 72 66 6f 72 6d 20 73 65 76 65 72 61 6c 0d  perform several.
276e0 0a 20 20 20 20 2f 2f 2f 20 6c 6f 77 2d 6c 65 76  .    /// low-lev
276f0 65 6c 20 64 61 74 61 20 6d 61 72 73 68 61 6c 6c  el data marshall
27700 69 6e 67 20 74 61 73 6b 73 20 62 65 74 77 65 65  ing tasks betwee
27710 6e 20 6e 61 74 69 76 65 20 61 6e 64 20 6d 61 6e  n native and man
27720 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20  aged code...    
27730 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27740 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
27750 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65  tic class SQLite
27760 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d 0a  Marshal..    {..
27770 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
27780 49 6e 74 50 74 72 20 48 65 6c 70 65 72 20 4d 65  IntPtr Helper Me
27790 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  thods..        /
277a0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
277b0 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e        /// Return
277c0 73 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72 65  s a new <see cre
277d0 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
277e0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 62 61  ject instance ba
277f0 73 65 64 20 6f 6e 20 74 68 65 0d 0a 20 20 20 20  sed on the..    
27800 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69 65      /// specifie
27810 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  d <see cref="Int
27820 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
27830 6e 73 74 61 6e 63 65 20 61 6e 64 20 61 6e 20 69  nstance and an i
27840 6e 74 65 67 65 72 0d 0a 20 20 20 20 20 20 20 20  nteger..        
27850 2f 2f 2f 20 6f 66 66 73 65 74 2e 0d 0a 20 20 20  /// offset...   
27860 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
27870 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
27880 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f   <param name="po
27890 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  inter">..       
278a0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
278b0 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
278c0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72  bject instance r
278d0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
278e0 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  base..        //
278f0 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  / memory locatio
27900 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
27910 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
27920 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
27930 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20  e="offset">..   
27940 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74       /// The int
27950 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d  eger offset from
27960 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79   the base memory
27970 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 74   location that t
27980 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20  he new..        
27990 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
279a0 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
279b0 20 69 6e 73 74 61 6e 63 65 20 73 68 6f 75 6c 64   instance should
279c0 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20 20 20   point to...    
279d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
279e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
279f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
27a00 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65   /// The new <se
27a10 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
27a20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
27a30 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
27a40 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
27a50 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
27a60 69 63 20 49 6e 74 50 74 72 20 49 6e 74 50 74 72  ic IntPtr IntPtr
27a70 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20  ForOffset(..    
27a80 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
27a90 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
27aa0 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d       int offset.
27ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
27ac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27ad0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
27ae0 77 20 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72  w IntPtr(pointer
27af0 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66 66  .ToInt64() + off
27b00 73 65 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  set);..        }
27b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
27b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
27b70 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
27b80 20 20 20 20 20 20 2f 2f 2f 20 52 6f 75 6e 64 73        /// Rounds
27b90 20 75 70 20 61 6e 20 69 6e 74 65 67 65 72 20 73   up an integer s
27ba0 69 7a 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ize to the next 
27bb0 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20  multiple of the 
27bc0 61 6c 69 67 6e 6d 65 6e 74 2e 0d 0a 20 20 20 20  alignment...    
27bd0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
27be0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
27bf0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a  <param name="siz
27c00 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
27c10 20 54 68 65 20 73 69 7a 65 2c 20 69 6e 20 62 79   The size, in by
27c20 74 65 73 2c 20 74 6f 20 62 65 20 72 6f 75 6e 64  tes, to be round
27c30 65 64 20 75 70 2e 0d 0a 20 20 20 20 20 20 20 20  ed up...        
27c40 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27c50 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
27c60 20 6e 61 6d 65 3d 22 61 6c 69 67 6e 6d 65 6e 74   name="alignment
27c70 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
27c80 54 68 65 20 72 65 71 75 69 72 65 64 20 61 6c 69  The required ali
27c90 67 6e 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 72  gnment for the r
27ca0 65 74 75 72 6e 20 76 61 6c 75 65 2e 0d 0a 20 20  eturn value...  
27cb0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
27cc0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
27cd0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
27ce0 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 2c     /// The size,
27cf0 20 69 6e 20 62 79 74 65 73 2c 20 72 6f 75 6e 64   in bytes, round
27d00 65 64 20 75 70 20 74 6f 20 74 68 65 20 6e 65 78  ed up to the nex
27d10 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
27d20 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
27d30 6c 69 67 6e 6d 65 6e 74 2e 20 20 54 68 69 73 20  lignment.  This 
27d40 76 61 6c 75 65 20 6d 61 79 20 65 6e 64 20 75 70  value may end up
27d50 20 62 65 69 6e 67 20 74 68 65 20 73 61 6d 65 20   being the same 
27d60 61 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0d  as the original.
27d70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 69 7a  .        /// siz
27d80 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27d90 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
27da0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
27db0 63 20 69 6e 74 20 52 6f 75 6e 64 55 70 28 0d 0a  c int RoundUp(..
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
27dd0 73 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  size,..         
27de0 20 20 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74     int alignment
27df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27e00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
27e10 20 20 20 20 20 20 20 20 69 6e 74 20 61 6c 69 67          int alig
27e20 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 20 3d 20  nmentMinusOne = 
27e30 61 6c 69 67 6e 6d 65 6e 74 20 2d 20 31 3b 0d 0a  alignment - 1;..
27e40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27e50 72 6e 20 28 28 73 69 7a 65 20 2b 20 61 6c 69 67  rn ((size + alig
27e60 6e 6d 65 6e 74 4d 69 6e 75 73 4f 6e 65 29 20 26  nmentMinusOne) &
27e70 20 7e 61 6c 69 67 6e 6d 65 6e 74 4d 69 6e 75 73   ~alignmentMinus
27e80 4f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  One);..        }
27e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
27ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ee0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
27ef0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
27f00 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d        /// Determ
27f10 69 6e 65 73 20 74 68 65 20 6f 66 66 73 65 74 2c  ines the offset,
27f20 20 69 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68   in bytes, of th
27f30 65 20 6e 65 78 74 20 73 74 72 75 63 74 75 72 65  e next structure
27f40 20 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   member...      
27f50 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
27f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
27f70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65  aram name="offse
27f80 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
27f90 20 54 68 65 20 6f 66 66 73 65 74 2c 20 69 6e 20   The offset, in 
27fa0 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20 63 75  bytes, of the cu
27fb0 72 72 65 6e 74 20 73 74 72 75 63 74 75 72 65 20  rrent structure 
27fc0 6d 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20  member...       
27fd0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27fe0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
27ff0 6d 20 6e 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a  m name="size">..
28000 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
28010 73 69 7a 65 2c 20 69 6e 20 62 79 74 65 73 2c 20  size, in bytes, 
28020 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  of the current s
28030 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e  tructure member.
28040 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
28050 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
28060 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
28070 22 61 6c 69 67 6e 6d 65 6e 74 22 3e 0d 0a 20 20  "alignment">..  
28080 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 6c        /// The al
28090 69 67 6e 6d 65 6e 74 2c 20 69 6e 20 62 79 74 65  ignment, in byte
280a0 73 2c 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  s, of the next s
280b0 74 72 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e  tructure member.
280c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
280d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
280e0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
280f0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f         /// The o
28100 66 66 73 65 74 2c 20 69 6e 20 62 79 74 65 73 2c  ffset, in bytes,
28110 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 72   of the next str
28120 75 63 74 75 72 65 20 6d 65 6d 62 65 72 2e 0d 0a  ucture member...
28130 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
28140 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
28150 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
28160 74 20 4e 65 78 74 4f 66 66 73 65 74 4f 66 28 0d  t NextOffsetOf(.
28170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
28180 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
28190 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 2c 0d        int size,.
281a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
281b0 20 61 6c 69 67 6e 6d 65 6e 74 0d 0a 20 20 20 20   alignment..    
281c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
281d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
281e0 20 20 72 65 74 75 72 6e 20 52 6f 75 6e 64 55 70    return RoundUp
281f0 28 6f 66 66 73 65 74 20 2b 20 73 69 7a 65 2c 20  (offset + size, 
28200 61 6c 69 67 6e 6d 65 6e 74 29 3b 0d 0a 20 20 20  alignment);..   
28210 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28220 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
28230 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28280 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
28290 20 4d 61 72 73 68 61 6c 20 52 65 61 64 20 48 65   Marshal Read He
282a0 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
282b0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
282c0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
282d0 20 52 65 61 64 73 20 61 20 3c 73 65 65 20 63 72   Reads a <see cr
282e0 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76 61  ef="Int32" /> va
282f0 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70 65  lue from the spe
28300 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20  cified memory.. 
28310 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74         /// locat
28320 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
28330 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
28340 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
28350 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e   name="pointer">
28360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
28370 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  e <see cref="Int
28380 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  Ptr" /> object i
28390 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e  nstance represen
283a0 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20  ting the base.. 
283b0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72         /// memor
283c0 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...   
283d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
283e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
283f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73  param name="offs
28400 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  et">..        //
28410 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66  / The integer of
28420 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61  fset from the ba
28430 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  se memory locati
28440 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20  on where the..  
28450 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
28460 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
28470 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61 64 20  alue to be read 
28480 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  is located...   
28490 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
284a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
284b0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
284c0 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
284d0 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
284e0 61 6c 75 65 20 61 74 20 74 68 65 20 73 70 65 63  alue at the spec
284f0 69 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63  ified memory loc
28500 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
28510 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
28520 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
28530 74 61 74 69 63 20 69 6e 74 20 52 65 61 64 49 6e  tatic int ReadIn
28540 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20  t32(..          
28550 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72    IntPtr pointer
28560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
28570 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20  nt offset..     
28580 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28590 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
285a0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
285b0 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
285c0 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
285d0 52 65 61 64 49 6e 74 33 32 28 70 6f 69 6e 74 65  ReadInt32(pointe
285e0 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c  r, offset);..#el
285f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
28600 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52  return Marshal.R
28610 65 61 64 49 6e 74 33 32 28 49 6e 74 50 74 72 46  eadInt32(IntPtrF
28620 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
28630 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e  , offset));..#en
28640 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
28650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
286b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
286c0 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 61 20      /// Reads a 
286d0 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c  <see cref="Doubl
286e0 65 22 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d  e" /> value from
286f0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
28700 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  emory..        /
28710 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  // location...  
28720 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28730 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
28740 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
28750 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
28760 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
28770 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
28780 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
28790 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
287a0 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
287b0 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
287c0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
287d0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
287e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
287f0 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
28800 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
28810 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
28820 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
28830 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65  y location where
28840 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
28850 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  / <see cref="Dou
28860 62 6c 65 22 20 2f 3e 20 74 6f 20 62 65 20 72 65  ble" /> to be re
28870 61 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a  ad is located...
28880 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
28890 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
288a0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
288b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
288c0 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
288d0 2f 3e 20 76 61 6c 75 65 20 61 74 20 74 68 65 20  /> value at the 
288e0 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
288f0 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
28900 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
28910 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
28920 69 63 20 73 74 61 74 69 63 20 64 6f 75 62 6c 65  ic static double
28930 20 52 65 61 64 44 6f 75 62 6c 65 28 0d 0a 20 20   ReadDouble(..  
28940 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
28950 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
28960 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
28970 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
28980 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
28990 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
289a0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
289b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
289c0 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 49 6e 74  BitConverter.Int
289d0 36 34 42 69 74 73 54 6f 44 6f 75 62 6c 65 28 4d  64BitsToDouble(M
289e0 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 36 34  arshal.ReadInt64
289f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28a00 20 20 20 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73     pointer, offs
28a10 65 74 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  et));..#else..  
28a20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28a30 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f   BitConverter.To
28a40 44 6f 75 62 6c 65 28 42 69 74 43 6f 6e 76 65 72  Double(BitConver
28a50 74 65 72 2e 47 65 74 42 79 74 65 73 28 0d 0a 20  ter.GetBytes(.. 
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
28a70 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 36 34  arshal.ReadInt64
28a80 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  (IntPtrForOffset
28a90 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
28aa0 29 29 29 2c 20 30 29 3b 0d 0a 23 65 6e 64 69 66  ))), 0);..#endif
28ab0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
28ac0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28b10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
28b20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
28b30 20 2f 2f 2f 20 52 65 61 64 73 20 61 6e 20 3c 73   /// Reads an <s
28b40 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
28b50 20 2f 3e 20 76 61 6c 75 65 20 66 72 6f 6d 20 74   /> value from t
28b60 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d  he specified mem
28b70 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
28b80 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...    
28b90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28ba0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
28bb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69  <param name="poi
28bc0 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  nter">..        
28bd0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
28be0 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
28bf0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
28c00 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62  presenting the b
28c10 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ase..        ///
28c20 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
28c30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
28c40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
28c50 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
28c60 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20  ="offset">..    
28c70 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65      /// The inte
28c80 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  ger offset from 
28c90 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20  the base memory 
28ca0 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74  location where t
28cb0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
28cc0 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
28cd0 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62  r" /> value to b
28ce0 65 20 72 65 61 64 20 69 73 20 6c 6f 63 61 74 65  e read is locate
28cf0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
28d00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
28d10 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
28d20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
28d30 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
28d40 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 61 74 20  tr" /> value at 
28d50 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65  the specified me
28d60 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
28d70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
28d80 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
28d90 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
28da0 74 50 74 72 20 52 65 61 64 49 6e 74 50 74 72 28  tPtr ReadIntPtr(
28db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
28dc0 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
28dd0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
28de0 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20  ffset..         
28df0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28e00 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
28e10 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
28e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28e30 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64  urn Marshal.Read
28e40 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2c 20  IntPtr(pointer, 
28e50 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d  offset);..#else.
28e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28e70 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64  urn Marshal.Read
28e80 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46 6f 72  IntPtr(IntPtrFor
28e90 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20  Offset(pointer, 
28ea0 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69  offset));..#endi
28eb0 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
28ec0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
28f30 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c 20 57  region Marshal W
28f40 72 69 74 65 20 48 65 6c 70 65 72 20 4d 65 74 68  rite Helper Meth
28f50 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
28f60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
28f70 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20 61      /// Writes a
28f80 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  n <see cref="Int
28f90 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  32" /> value to 
28fa0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65  the specified me
28fb0 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mory..        //
28fc0 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  / location...   
28fd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
28fe0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
28ff0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f   <param name="po
29000 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  inter">..       
29010 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
29020 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
29030 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72  bject instance r
29040 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
29050 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  base..        //
29060 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  / memory locatio
29070 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
29080 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
29090 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
290a0 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20  e="offset">..   
290b0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74       /// The int
290c0 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d  eger offset from
290d0 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79   the base memory
290e0 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20   location where 
290f0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
29100 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33   <see cref="Int3
29110 32 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62  2" /> value to b
29120 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63  e written is loc
29130 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ated...        /
29140 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29150 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29160 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
29170 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
29180 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
29190 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69   /> value to wri
291a0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
291b0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
291c0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
291d0 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74 33 32   void WriteInt32
291e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
291f0 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a  ntPtr pointer,..
29200 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
29210 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  offset,..       
29220 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 0d 0a       int value..
29230 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
29240 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
29250 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
29260 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
29270 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
29280 69 74 65 49 6e 74 33 32 28 70 6f 69 6e 74 65 72  iteInt32(pointer
29290 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c 75 65 29  , offset, value)
292a0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
292b0 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72        Marshal.Wr
292c0 69 74 65 49 6e 74 33 32 28 49 6e 74 50 74 72 46  iteInt32(IntPtrF
292d0 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
292e0 2c 20 6f 66 66 73 65 74 29 2c 20 76 61 6c 75 65  , offset), value
292f0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
29300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29310 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29350 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29360 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
29370 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 57  >..        /// W
29380 72 69 74 65 73 20 61 6e 20 3c 73 65 65 20 63 72  rites an <see cr
29390 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e 20 76 61  ef="Int64" /> va
293a0 6c 75 65 20 74 6f 20 74 68 65 20 73 70 65 63 69  lue to the speci
293b0 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  fied memory..   
293c0 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f       /// locatio
293d0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
293e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
293f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
29400 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a  ame="pointer">..
29410 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
29420 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74  <see cref="IntPt
29430 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  r" /> object ins
29440 74 61 6e 63 65 20 72 65 70 72 65 73 65 6e 74 69  tance representi
29450 6e 67 20 74 68 65 20 62 61 73 65 0d 0a 20 20 20  ng the base..   
29460 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20       /// memory 
29470 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
29480 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
29490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
294a0 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74  ram name="offset
294b0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
294c0 54 68 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73  The integer offs
294d0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 61 73 65  et from the base
294e0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
294f0 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20   where the..    
29500 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
29510 66 3d 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c  f="Int64" /> val
29520 75 65 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e  ue to be written
29530 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20   is located...  
29540 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
29550 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
29560 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
29570 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
29580 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
29590 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65  "Int64" /> value
295a0 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20 20 20   to write...    
295b0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
295c0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
295d0 20 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69   static void Wri
295e0 74 65 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20  teInt64(..      
295f0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69        IntPtr poi
29600 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  nter,..         
29610 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a     int offset,..
29620 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
29630 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
29640 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
29650 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
29660 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
29670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
29680 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34  rshal.WriteInt64
29690 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
296a0 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
296b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
296c0 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34  rshal.WriteInt64
296d0 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  (IntPtrForOffset
296e0 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
296f0 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ), value);..#end
29700 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
29710 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
29770 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
29780 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 20     /// Writes a 
29790 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c  <see cref="Doubl
297a0 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74  e" /> value to t
297b0 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d  he specified mem
297c0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ory..        ///
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 73 75 6d 6d 61 72      /// </summar
297f0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
29800 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69  <param name="poi
29810 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  nter">..        
29820 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
29830 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62  f="IntPtr" /> ob
29840 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
29850 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62  presenting the b
29860 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ase..        ///
29870 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
29880 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
29890 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
298a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
298b0 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20  ="offset">..    
298c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65      /// The inte
298d0 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  ger offset from 
298e0 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20  the base memory 
298f0 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74  location where t
29900 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
29910 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c  <see cref="Doubl
29920 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62  e" /> value to b
29930 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63  e written is loc
29940 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ated...        /
29950 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29960 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29970 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
29980 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
29990 73 65 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65  see cref="Double
299a0 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72  " /> value to wr
299b0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ite...        //
299c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
299d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
299e0 63 20 76 6f 69 64 20 57 72 69 74 65 44 6f 75 62  c void WriteDoub
299f0 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
29a00 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
29a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
29a20 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  t offset,..     
29a30 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61         double va
29a40 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
29a50 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
29a60 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
29a70 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
29a80 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
29a90 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 70 6f  al.WriteInt64(po
29aa0 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 0d 0a  inter, offset,..
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ac0 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 44 6f 75  BitConverter.Dou
29ad0 62 6c 65 54 6f 49 6e 74 36 34 42 69 74 73 28 76  bleToInt64Bits(v
29ae0 61 6c 75 65 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue));..#else..
29af0 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
29b00 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34 28 49  hal.WriteInt64(I
29b10 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
29b20 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
29b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b40 20 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 54    BitConverter.T
29b50 6f 49 6e 74 36 34 28 42 69 74 43 6f 6e 76 65 72  oInt64(BitConver
29b60 74 65 72 2e 47 65 74 42 79 74 65 73 28 76 61 6c  ter.GetBytes(val
29b70 75 65 29 2c 20 30 29 29 3b 0d 0a 23 65 6e 64 69  ue), 0));..#endi
29b80 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
29b90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29be0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
29bf0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
29c00 20 20 2f 2f 2f 20 57 72 69 74 65 73 20 61 20 3c    /// Writes a <
29c10 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
29c20 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 74 68  " /> value to th
29c30 65 20 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f  e specified memo
29c40 72 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ry..        /// 
29c50 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
29c60 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
29c70 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
29c80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e  param name="poin
29c90 74 65 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ter">..        /
29ca0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
29cb0 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a  ="IntPtr" /> obj
29cc0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70  ect instance rep
29cd0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61  resenting the ba
29ce0 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  se..        /// 
29cf0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  memory location.
29d00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
29d10 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29d20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
29d30 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20  "offset">..     
29d40 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
29d50 65 72 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  er offset from t
29d60 68 65 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c  he base memory l
29d70 6f 63 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68  ocation where th
29d80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
29d90 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72  see cref="IntPtr
29da0 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 62 65  " /> value to be
29db0 20 77 72 69 74 74 65 6e 20 69 73 20 6c 6f 63 61   written is loca
29dc0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ted...        //
29dd0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
29de0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
29df0 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
29e00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
29e10 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
29e20 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 77 72 69   /> value to wri
29e30 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  te...        ///
29e40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
29e50 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
29e60 20 76 6f 69 64 20 57 72 69 74 65 49 6e 74 50 74   void WriteIntPt
29e70 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
29e80 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
29e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
29ea0 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20   offset,..      
29eb0 20 20 20 20 20 20 49 6e 74 50 74 72 20 76 61 6c        IntPtr val
29ec0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
29ed0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
29ee0 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
29ef0 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
29f00 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
29f10 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 6f  l.WriteIntPtr(po
29f20 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 20 76  inter, offset, v
29f30 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
29f40 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
29f50 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 49  al.WriteIntPtr(I
29f60 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
29f70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
29f80 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
29f90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
29fa0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29fb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a000 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2a010 65 67 69 6f 6e 20 4f 62 6a 65 63 74 20 48 65 6c  egion Object Hel
2a020 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
2a030 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2a040 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2a050 47 65 6e 65 72 61 74 65 73 20 61 20 68 61 73 68  Generates a hash
2a060 20 63 6f 64 65 20 76 61 6c 75 65 20 66 6f 72 20   code value for 
2a070 74 68 65 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  the object...   
2a080 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2a090 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2a0a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
2a0b0 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
2a0c0 2f 2f 20 54 68 65 20 6f 62 6a 65 63 74 20 69 6e  // The object in
2a0d0 73 74 61 6e 63 65 20 75 73 65 64 20 74 6f 20 63  stance used to c
2a0e0 61 6c 63 75 6c 61 74 65 20 74 68 65 20 68 61 73  alculate the has
2a0f0 68 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  h code...       
2a100 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2a110 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2a120 6d 20 6e 61 6d 65 3d 22 69 64 65 6e 74 69 74 79  m name="identity
2a130 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
2a140 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 64 69 66 66  Non-zero if diff
2a150 65 72 65 6e 74 20 6f 62 6a 65 63 74 20 69 6e 73  erent object ins
2a160 74 61 6e 63 65 73 20 77 69 74 68 20 74 68 65 20  tances with the 
2a170 73 61 6d 65 20 76 61 6c 75 65 20 73 68 6f 75 6c  same value shoul
2a180 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 67  d..        /// g
2a190 65 6e 65 72 61 74 65 20 64 69 66 66 65 72 65 6e  enerate differen
2a1a0 74 20 68 61 73 68 20 63 6f 64 65 73 2c 20 77 68  t hash codes, wh
2a1b0 65 72 65 20 61 70 70 6c 69 63 61 62 6c 65 2e 20  ere applicable. 
2a1c0 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 0d   This parameter.
2a1d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73  .        /// has
2a1e0 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
2a1f0 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46  e .NET Compact F
2a200 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
2a210 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2a220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
2a230 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2a240 2f 2f 2f 20 54 68 65 20 68 61 73 68 20 63 6f 64  /// The hash cod
2a250 65 20 76 61 6c 75 65 20 2d 4f 52 2d 20 7a 65 72  e value -OR- zer
2a260 6f 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20  o if the object 
2a270 69 73 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  is null...      
2a280 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2a290 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2a2a0 20 73 74 61 74 69 63 20 69 6e 74 20 47 65 74 48   static int GetH
2a2b0 61 73 68 43 6f 64 65 28 0d 0a 20 20 20 20 20 20  ashCode(..      
2a2c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
2a2d0 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
2a2e0 20 62 6f 6f 6c 20 69 64 65 6e 74 69 74 79 0d 0a   bool identity..
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2a300 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
2a310 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
2a320 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
2a330 20 20 20 20 20 20 69 66 20 28 69 64 65 6e 74 69        if (identi
2a340 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty)..           
2a350 20 20 20 20 20 72 65 74 75 72 6e 20 52 75 6e 74       return Runt
2a360 69 6d 65 48 65 6c 70 65 72 73 2e 47 65 74 48 61  imeHelpers.GetHa
2a370 73 68 43 6f 64 65 28 76 61 6c 75 65 29 3b 0d 0a  shCode(value);..
2a380 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
2a390 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
2a3a0 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
2a3b0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
2a3c0 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 47 65 74  return value.Get
2a3d0 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 20 20 20  HashCode();..   
2a3e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a3f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2a400 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
2a410 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
2a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a460 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
2a470 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ion SQLiteModule
2a480 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20   Base Class..   
2a490 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2a4a0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
2a4b0 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ss represents a 
2a4c0 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c 20  managed virtual 
2a4d0 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 69 6d 70  table module imp
2a4e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
2a4f0 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f 74 20    /// It is not 
2a500 73 65 61 6c 65 64 20 61 6e 64 20 6d 75 73 74 20  sealed and must 
2a510 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  be used as the b
2a520 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61 6e  ase class for an
2a530 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 65 72 2d  y..    /// user-
2a540 64 65 66 69 6e 65 64 20 76 69 72 74 75 61 6c 20  defined virtual 
2a550 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 63 6c 61  table module cla
2a560 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  sses implemented
2a570 20 69 6e 20 6d 61 6e 61 67 65 64 20 63 6f 64 65   in managed code
2a580 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2a590 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
2a5a0 63 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73  c abstract class
2a5b0 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 3a 0d   SQLiteModule :.
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51  .            ISQ
2a5d0 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
2a5e0 65 2c 20 2f 2a 49 53 51 4c 69 74 65 4e 61 74 69  e, /*ISQLiteNati
2a5f0 76 65 4d 6f 64 75 6c 65 2c 2a 2f 0d 0a 20 20 20  veModule,*/..   
2a600 20 20 20 20 20 20 20 20 20 49 44 69 73 70 6f 73           IDispos
2a610 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c  able /* NOT SEAL
2a620 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20  ED */..    {..  
2a630 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51        #region SQ
2a640 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a650 20 50 72 69 76 61 74 65 20 43 6c 61 73 73 0d 0a   Private Class..
2a660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2a670 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2a680 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d  // This class im
2a690 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 3c 73 65  plements the <se
2a6a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2a6b0 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d  ativeModule" />.
2a6c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74  .        /// int
2a6d0 65 72 66 61 63 65 20 62 79 20 66 6f 72 77 61 72  erface by forwar
2a6e0 64 69 6e 67 20 74 68 6f 73 65 20 6d 65 74 68 6f  ding those metho
2a6f0 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 0d 0a  d calls to the..
2a700 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
2a710 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
2a720 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ule" /> object i
2a730 6e 73 74 61 6e 63 65 20 69 74 20 63 6f 6e 74 61  nstance it conta
2a740 69 6e 73 2e 20 20 49 66 20 74 68 65 0d 0a 20 20  ins.  If the..  
2a750 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69        /// contai
2a760 6e 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ned <see cref="S
2a770 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
2a780 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
2a790 69 73 20 6e 75 6c 6c 2c 20 61 6c 6c 0d 0a 20 20  is null, all..  
2a7a0 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 3c 73        /// the <s
2a7b0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a7c0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e  NativeModule" />
2a7d0 20 6d 65 74 68 6f 64 73 20 73 69 6d 70 6c 79 20   methods simply 
2a7e0 67 65 6e 65 72 61 74 65 20 61 6e 0d 0a 20 20 20  generate an..   
2a7f0 20 20 20 20 20 2f 2f 2f 20 65 72 72 6f 72 2e 0d       /// error..
2a800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2a810 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a820 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
2a830 63 6c 61 73 73 20 53 51 4c 69 74 65 4e 61 74 69  class SQLiteNati
2a840 76 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20  veModule :..    
2a850 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
2a860 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c  iteNativeModule,
2a870 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20   IDisposable..  
2a880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a890 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2a8a0 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a8c0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2a8d0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
2a8e0 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  is the value tha
2a8f0 74 20 69 73 20 61 6c 77 61 79 73 20 75 73 65 64  t is always used
2a900 20 66 6f 72 20 74 68 65 20 22 6c 6f 67 45 72 72   for the "logErr
2a910 6f 72 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ors"..          
2a920 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20    /// parameter 
2a930 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 73  to the various s
2a940 74 61 74 69 63 20 65 72 72 6f 72 20 68 61 6e 64  tatic error hand
2a950 6c 69 6e 67 20 6d 65 74 68 6f 64 73 20 70 72 6f  ling methods pro
2a960 76 69 64 65 64 0d 0a 20 20 20 20 20 20 20 20 20  vided..         
2a970 20 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 3c 73     /// by the <s
2a980 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
2a990 6f 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73 2e  odule" /> class.
2a9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a9b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2a9c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2a9d0 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66  e const bool Def
2a9e0 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 20 3d 20  aultLogErrors = 
2a9f0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
2aa00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2aa50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2aa60 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2aa70 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74     /// This is t
2aa80 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 69 73  he value that is
2aa90 20 61 6c 77 61 79 73 20 75 73 65 64 20 66 6f 72   always used for
2aaa0 20 74 68 65 20 22 6c 6f 67 45 78 63 65 70 74 69   the "logExcepti
2aab0 6f 6e 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ons"..          
2aac0 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20    /// parameter 
2aad0 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 73  to the various s
2aae0 74 61 74 69 63 20 65 72 72 6f 72 20 68 61 6e 64  tatic error hand
2aaf0 6c 69 6e 67 20 6d 65 74 68 6f 64 73 20 70 72 6f  ling methods pro
2ab00 76 69 64 65 64 0d 0a 20 20 20 20 20 20 20 20 20  vided..         
2ab10 20 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 3c 73     /// by the <s
2ab20 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
2ab30 6f 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73 2e  odule" /> class.
2ab40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ab50 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2ab60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2ab70 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66  e const bool Def
2ab80 61 75 6c 74 4c 6f 67 45 78 63 65 70 74 69 6f 6e  aultLogException
2ab90 73 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  s = true;....   
2aba0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2abb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ac00 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2ac10 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
2ac20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
2ac30 73 61 67 65 20 74 65 78 74 20 75 73 65 64 20 77  sage text used w
2ac40 68 65 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 65  hen the containe
2ac50 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
2ac60 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
2ac70 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f  LiteModule" /> o
2ac80 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69  bject instance i
2ac90 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d  s not available.
2aca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2acb0 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 2e   for any reason.
2acc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2acd0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2ace0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2acf0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4d  e const string M
2ad00 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2ad10 65 45 72 72 6f 72 4d 65 73 73 61 67 65 20 3d 0d  eErrorMessage =.
2ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad30 20 22 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20   "native module 
2ad40 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
2ad50 6f 74 20 61 76 61 69 6c 61 62 6c 65 22 3b 0d 0a  ot available";..
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2ad70 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2ad80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2ad90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ada0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2adb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2adc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2add0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2ade0 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20   Private Data.. 
2adf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ae00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ae10 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
2ae20 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
2ae30 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
2ae40 20 69 6e 73 74 61 6e 63 65 20 75 73 65 64 20 74   instance used t
2ae50 6f 20 70 72 6f 76 69 64 65 0d 0a 20 20 20 20 20  o provide..     
2ae60 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 20 69 6d         /// an im
2ae70 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
2ae80 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ae90 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2aea0 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  le" />..        
2aeb0 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63      /// interfac
2aec0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2aed0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2aef0 61 74 65 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ate SQLiteModule
2af00 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20   module;..      
2af10 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2af20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2af30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2af80 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
2af90 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2afb0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2afc0 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
2afd0 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
2afe0 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
2aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b000 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2b010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2b020 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
2b030 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e">..           
2b040 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
2b050 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
2b060 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
2b070 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f  ance used to pro
2b080 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  vide..          
2b090 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65    /// an impleme
2b0a0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  ntation of the <
2b0b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b0c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
2b0d0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2b0e0 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  // interface... 
2b0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b100 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b110 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2b120 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d  teNativeModule(.
2b130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b140 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
2b150 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  dule..          
2b160 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2b170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b180 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64          this.mod
2b190 75 6c 65 20 3d 20 6d 6f 64 75 6c 65 3b 0d 0a 20  ule = module;.. 
2b1a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2b1b0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2b1c0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2b1d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b210 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b220 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2b230 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65  rivate Static Me
2b240 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
2b250 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2b260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b270 2f 20 53 65 74 73 20 74 68 65 20 74 61 62 6c 65  / Sets the table
2b280 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
2b290 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63  o one that indic
2b2a0 61 74 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d  ates the native.
2b2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b2c0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2b2d0 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76  tation is not av
2b2e0 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...      
2b2f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2b300 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2b310 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2b320 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2b330 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
2b340 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
2b350 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
2b360 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
2b370 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ture...         
2b380 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b390 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b3a0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2b3b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
2b3c0 76 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72  value of <see cr
2b3d0 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43  ef="SQLiteErrorC
2b3e0 6f 64 65 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a  ode.Error" />...
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b400 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2b410 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b420 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
2b430 6f 72 43 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74  orCode ModuleNot
2b440 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2b450 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
2b460 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2b470 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
2b480 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2b490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b4a0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
2b4b0 72 6f 72 28 6e 75 6c 6c 2c 20 70 56 74 61 62 2c  ror(null, pVtab,
2b4c0 20 44 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72   DefaultLogError
2b4d0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
2b4e0 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 4c          DefaultL
2b4f0 6f 67 45 78 63 65 70 74 69 6f 6e 73 2c 20 4d 6f  ogExceptions, Mo
2b500 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2b510 45 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a  ErrorMessage);..
2b520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b530 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
2b540 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
2b550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2b560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2b5c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b5e0 53 65 74 73 20 74 68 65 20 74 61 62 6c 65 20 65  Sets the table e
2b5f0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20  rror message to 
2b600 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  one that indicat
2b610 65 73 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  es the native.. 
2b620 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d             /// m
2b630 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
2b640 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 76 61 69  tion is not avai
2b650 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...        
2b660 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2b670 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2b680 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2b690 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
2b6a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
2b6b0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
2b6c0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
2b6d0 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
2b6e0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
2b6f0 2f 2f 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  // structure... 
2b700 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b710 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b720 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2b730 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b740 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66  /// The value of
2b750 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2b760 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
2b770 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  r" />...        
2b780 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2b790 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b7a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53  private static S
2b7b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4d  QLiteErrorCode M
2b7c0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2b7d0 65 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20  eCursorError(.. 
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b7f0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2b810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b830 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
2b840 6e 75 6c 6c 2c 20 70 43 75 72 73 6f 72 2c 20 44  null, pCursor, D
2b850 65 66 61 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c  efaultLogErrors,
2b860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b870 20 20 20 20 20 20 44 65 66 61 75 6c 74 4c 6f 67        DefaultLog
2b880 45 78 63 65 70 74 69 6f 6e 73 2c 20 4d 6f 64 75  Exceptions, Modu
2b890 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72  leNotAvailableEr
2b8a0 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a  rorMessage);....
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8c0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
2b8d0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
2b8e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2b8f0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2b900 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2b910 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b960 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
2b970 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b980 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
2b990 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2b9a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b9b0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b9c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b9d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
2b9e0 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64  reate" /> method
2b9f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ba00 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2ba10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ba20 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22  param name="pDb"
2ba30 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2ba40 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2ba50 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2ba60 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
2ba70 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
2ba80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ba90 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2baa0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2bab0 6e 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20  name="pAux">..  
2bac0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2bad0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2bae0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2baf0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
2bb00 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2bb10 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2bb20 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2bb30 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2bb40 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
2bb50 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2bb60 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2bb70 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2bb80 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68  xCreate" /> meth
2bb90 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2bba0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2bbb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bbc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76  param name="argv
2bbd0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2bbe0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2bbf0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2bc00 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
2bc10 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2bc20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bc30 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2bc40 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2bc50 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bc70 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2bc80 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2bc90 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
2bca0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2bcb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2bcc0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2bcd0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2bce0 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20  e="pError">..   
2bcf0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2bd00 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2bd10 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2bd20 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
2bd30 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2bd40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2bd50 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2bd60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2bd70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2bd80 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2bd90 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2bda0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
2bdb0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2bdc0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
2bdd0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2bde0 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2bdf0 72 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74 65  rrorCode xCreate
2be00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2be10 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a     IntPtr pDb,..
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be30 49 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20  IntPtr pAux,..  
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2be50 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2be60 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2be70 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
2be80 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
2be90 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
2bea0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
2beb0 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20  tPtr pError..   
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bef0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2bf00 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c     // NOTE: Call
2bf10 65 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64  ed by native cod
2bf20 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2bf30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2bf40 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2bf50 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45  Disposed(); /* E
2bf60 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20  XEMPT */....    
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bf80 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bfa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bfb0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
2bfc0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
2bfd0 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
2bfe0 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64               Mod
2c000 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45  uleNotAvailableE
2c010 72 72 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d  rrorMessage);...
2c020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c030 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
2c040 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
2c050 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
2c060 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c070 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c080 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 28 0d  module.xCreate(.
2c090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0a0 20 20 20 20 20 70 44 62 2c 20 70 41 75 78 2c 20       pDb, pAux, 
2c0b0 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20  argc, argv, ref 
2c0c0 70 56 74 61 62 2c 20 72 65 66 20 70 45 72 72 6f  pVtab, ref pErro
2c0d0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2c0e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c0f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c110 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c140 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2c150 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2c160 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2c170 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2c180 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
2c190 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ect" /> method..
2c1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c1b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2c1c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2c1d0 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d  ram name="pDb">.
2c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c1f0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2c200 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2c210 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
2c220 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c230 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c240 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c250 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c260 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
2c270 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c280 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c290 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c2a0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
2c2b0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2c2c0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2c2d0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2c2e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2c2f0 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20  "argc">..       
2c300 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2c310 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2c320 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2c330 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
2c340 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2c350 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2c360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c370 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
2c380 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  v">..           
2c390 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2c3a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2c3b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
2c3c0 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  nect" /> method.
2c3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c3e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c3f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2c400 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2c410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c420 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c430 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c440 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2c450 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2c460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c470 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2c480 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2c490 6e 61 6d 65 3d 22 70 45 72 72 6f 72 22 3e 0d 0a  name="pError">..
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c4b0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2c4c0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2c4d0 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
2c4e0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2c4f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2c500 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2c510 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2c520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c530 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c540 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c550 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
2c560 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2c570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c580 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2c590 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2c5a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
2c5b0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
2c5c0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2c5d0 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  pDb,..          
2c5e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75        IntPtr pAu
2c5f0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
2c600 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2c620 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20  ntPtr argv,..   
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2c640 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f  ref IntPtr pErro
2c670 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2c680 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2c690 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c6a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2c6b0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2c6c0 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69  : Called by nati
2c6d0 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  ve code...      
2c6e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c700 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2c710 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a  ; /* EXEMPT */..
2c720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c730 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2c740 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
2c770 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72  rror = SQLiteStr
2c780 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
2c790 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  omString(..     
2c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7b0 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69     ModuleNotAvai
2c7c0 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67  lableErrorMessag
2c7d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2c7e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c7f0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
2c800 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
2c810 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c830 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f  eturn module.xCo
2c840 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
2c850 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2c              pDb,
2c860 20 70 41 75 78 2c 20 61 72 67 63 2c 20 61 72 67   pAux, argc, arg
2c870 76 2c 20 72 65 66 20 70 56 74 61 62 2c 20 72 65  v, ref pVtab, re
2c880 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  f pError);..    
2c890 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c8a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c900 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2c910 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2c920 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2c930 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2c940 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  e.xBestIndex" />
2c950 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2c960 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2c970 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2c980 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2c990 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2c9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2c9b0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2c9c0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2c9d0 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f  le.xBestIndex" /
2c9e0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2c9f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2ca00 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2ca10 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2ca20 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20  ="pIndex">..    
2ca30 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2ca40 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2ca50 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ca60 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22 20 2f  le.xBestIndex" /
2ca70 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2ca80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2ca90 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2caa0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cac0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cad0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2cae0 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
2caf0 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  x" /> method... 
2cb00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2cb10 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2cb20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2cb30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42  LiteErrorCode xB
2cb40 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20  estIndex(..     
2cb50 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2cb60 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
2cb70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2cb80 20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20   pIndex..       
2cb90 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2cba0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cbb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cbd0 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62  / NOTE: Called b
2cbe0 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a  y native code...
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2cc10 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2cc20 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50  osed(); /* EXEMP
2cc30 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  T */....        
2cc40 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2cc50 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2cc80 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45  tAvailableTableE
2cc90 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a  rror(pVtab);....
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccb0 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 42  return module.xB
2ccc0 65 73 74 49 6e 64 65 78 28 70 56 74 61 62 2c 20  estIndex(pVtab, 
2ccd0 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20  pIndex);..      
2cce0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ccf0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2cd40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2cd50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2cd60 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2cd70 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2cd80 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2cd90 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20  xDisconnect" /> 
2cda0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2cdb0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2cdc0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2cdd0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2cde0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2cdf0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2ce00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2ce10 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2ce20 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f  e.xDisconnect" /
2ce30 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2ce40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2ce50 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2ce60 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ce80 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2ce90 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2cea0 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  Module.xDisconne
2ceb0 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ct" /> method...
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ced0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2cee0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2cef0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2cf00 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2cf20 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
2cf30 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2cf40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2cf60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf70 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64   // NOTE: Called
2cf80 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e   by native code.
2cf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cfa0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2cfb0 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2cfc0 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45  sposed(); /* EXE
2cfd0 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  MPT */....      
2cfe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2cff0 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2d020 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2d030 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2d040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d050 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2d060 78 44 69 73 63 6f 6e 6e 65 63 74 28 70 56 74 61  xDisconnect(pVta
2d070 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
2d080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d090 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d0d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d0e0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2d0f0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2d100 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2d110 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2d120 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74  tiveModule.xDest
2d130 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  roy" /> method..
2d140 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d150 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2d160 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2d170 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2d180 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d190 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2d1a0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d1b0 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  iveModule.xDestr
2d1c0 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  oy" /> method...
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d1e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d1f0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2d200 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2d210 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2d220 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2d230 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73  ativeModule.xDes
2d240 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  troy" /> method.
2d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d260 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2d270 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2d280 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2d290 20 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20   xDestroy(..    
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2d2b0 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
2d2c0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2d2d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20  // NOTE: Called 
2d310 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d  by native code..
2d320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d330 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2d340 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2d350 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d  posed(); /* EXEM
2d360 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  PT */....       
2d370 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
2d380 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3a0 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e    return ModuleN
2d3b0 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65  otAvailableTable
2d3c0 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d  Error(pVtab);...
2d3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d3e0 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78   return module.x
2d3f0 44 65 73 74 72 6f 79 28 70 56 74 61 62 29 3b 0d  Destroy(pVtab);.
2d400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d460 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2d470 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2d480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d490 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2d4a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2d4b0 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e  Module.xOpen" />
2d4c0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d4d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2d4e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2d4f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d500 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2d510 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d520 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d530 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d540 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74  le.xOpen" /> met
2d550 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2d560 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2d570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d580 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75  <param name="pCu
2d590 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rsor">..        
2d5a0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2d5b0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2d5c0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2d5d0 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
2d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d5f0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d600 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2d610 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2d620 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d630 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d640 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f  eNativeModule.xO
2d650 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  pen" /> method..
2d660 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d670 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2d680 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2d690 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2d6a0 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20  xOpen(..        
2d6b0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2d6c0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
2d6d0 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
2d6e0 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
2d6f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d700 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2d720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d730 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64   // NOTE: Called
2d740 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e   by native code.
2d750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d760 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d770 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2d780 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45  sposed(); /* EXE
2d790 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  MPT */....      
2d7a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2d7b0 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7d0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2d7e0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2d7f0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d810 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2d820 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 72 65 66  xOpen(pVtab, ref
2d830 20 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20   pCursor);..    
2d840 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d850 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d8b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2d8c0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d8d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d8e0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d8f0 65 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74  e.xClose" /> met
2d900 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2d910 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2d920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d930 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2d940 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2d950 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d960 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d970 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2d980 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2d990 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d9a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d9b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d9c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2d9d0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d9e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d9f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2da00 2e 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68  .xClose" /> meth
2da10 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2da20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
2da30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2da40 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
2da50 6f 64 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ode xClose(..   
2da60 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2da70 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2da90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2dab0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2dac0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c     // NOTE: Call
2dad0 65 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64  ed by native cod
2dae0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2daf0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2db00 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2db10 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45  Disposed(); /* E
2db20 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20  XEMPT */....    
2db30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2db40 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2db50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2db60 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2db70 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75  leNotAvailableCu
2db80 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f  rsorError(pCurso
2db90 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2dba0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2dbb0 64 75 6c 65 2e 78 43 6c 6f 73 65 28 70 43 75 72  dule.xClose(pCur
2dbc0 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
2dbd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dbe0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2dc30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2dc40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2dc50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2dc60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2dc70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2dc80 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2dc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2dca0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2dcb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2dcc0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
2dcd0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
2dce0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2dcf0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2dd00 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2dd10 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2dd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2dd30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2dd40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2dd50 61 6d 20 6e 61 6d 65 3d 22 69 64 78 4e 75 6d 22  am name="idxNum"
2dd60 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dd70 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2dd80 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2dd90 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
2dda0 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  r" /> method... 
2ddb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2ddc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2ddd0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2dde0 6e 61 6d 65 3d 22 69 64 78 53 74 72 22 3e 0d 0a  name="idxStr">..
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2de00 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2de10 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2de20 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2de30 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2de40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2de50 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2de60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2de70 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
2de80 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2de90 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2dea0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2deb0 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2dec0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2ded0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2dee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2def0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
2df00 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  gv">..          
2df10 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2df20 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2df30 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
2df40 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
2df50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2df60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2df70 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
2df80 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2df90 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2dfa0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2dfb0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2dfc0 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64  ilter" /> method
2dfd0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2dfe0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2dff0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2e000 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2e010 65 20 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20  e xFilter(..    
2e020 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2e030 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2e050 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20   idxNum,..      
2e060 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2e070 20 69 64 78 53 74 72 2c 0d 0a 20 20 20 20 20 20   idxStr,..      
2e080 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
2e090 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gc,..           
2e0a0 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
2e0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e0c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2e0d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e0e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2e0f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2e100 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76   Called by nativ
2e110 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  e code...       
2e120 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2e140 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2e150 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d   /* EXEMPT */...
2e160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e170 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2e180 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2e190 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e1a0 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2e1b0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2e1c0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2e1d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e1e0 72 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  rn module.xFilte
2e1f0 72 28 70 43 75 72 73 6f 72 2c 20 69 64 78 4e 75  r(pCursor, idxNu
2e200 6d 2c 20 69 64 78 53 74 72 2c 20 61 72 67 63 2c  m, idxStr, argc,
2e210 20 61 72 67 76 29 3b 0d 0a 20 20 20 20 20 20 20   argv);..       
2e220 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e230 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e270 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e280 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2e290 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2e2a0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e2b0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e2c0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e2d0 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Next" /> method.
2e2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e2f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2e300 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2e310 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
2e320 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  or">..          
2e330 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2e340 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2e350 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65  NativeModule.xNe
2e360 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  xt" /> method...
2e370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e380 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2e390 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2e3a0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2e3b0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2e3c0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2e3d0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
2e3e0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2e3f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e400 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2e410 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2e420 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e  LiteErrorCode xN
2e430 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ext(..          
2e440 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
2e450 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
2e460 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2e470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e480 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2e490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2e4a0 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e  OTE: Called by n
2e4b0 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20  ative code...   
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4e0 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65   // CheckDispose
2e4f0 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a  d(); /* EXEMPT *
2e500 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2e510 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2e520 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e540 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2e550 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72  ailableCursorErr
2e560 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e580 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4e  return module.xN
2e590 65 78 74 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20  ext(pCursor);.. 
2e5a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2e5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e610 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2e620 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2e630 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2e640 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2e650 64 75 6c 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65  dule.xEof" /> me
2e660 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e670 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2e680 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e690 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2e6a0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2e6b0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e6c0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e6d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e6e0 65 2e 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f  e.xEof" /> metho
2e6f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2e700 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2e710 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
2e720 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2e730 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2e740 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2e750 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2e760 78 45 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  xEof" /> method.
2e770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e780 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2e790 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2e7a0 20 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20   int xEof(..    
2e7b0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2e7c0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2e7e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e810 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65    // NOTE: Calle
2e820 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65  d by native code
2e830 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e840 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2e850 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2e860 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58  isposed(); /* EX
2e870 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  EMPT */....     
2e880 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2e890 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e8c0 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74         ModuleNot
2e8d0 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72 45  AvailableCursorE
2e8e0 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rror(pCursor);..
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e900 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20      return 1;.. 
2e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e930 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c      return modul
2e940 65 2e 78 45 6f 66 28 70 43 75 72 73 6f 72 29 3b  e.xEof(pCursor);
2e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2e9c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2e9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e9e0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e9f0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2ea00 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22  eModule.xColumn"
2ea10 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ea20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
2ea30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ea40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2ea50 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
2ea60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ea70 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2ea80 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2ea90 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22  eModule.xColumn"
2eaa0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2eab0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2eac0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2ead0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2eae0 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22 3e 0d 0a  me="pContext">..
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2eb00 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2eb10 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2eb20 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20  Module.xColumn" 
2eb30 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2eb40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2eb50 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2eb60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2eb70 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 20 20  e="index">..    
2eb80 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2eb90 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2eba0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2ebb0 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d  le.xColumn" /> m
2ebc0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2ebd0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2ebe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ebf0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2ec00 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2ec10 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2ec20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2ec30 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20  ule.xColumn" /> 
2ec40 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2ec50 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2ec60 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ec70 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ec80 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
2ec90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eca0 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
2ecb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ecc0 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 74 65     IntPtr pConte
2ecd0 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
2ece0 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a       int index..
2ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ed30 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43        // NOTE: C
2ed40 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65 20  alled by native 
2ed50 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  code...         
2ed60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2ed70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2ed80 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 2f  eckDisposed(); /
2ed90 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20  * EXEMPT */.... 
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2edb0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2edc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2edd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2ede0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2edf0 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
2ee00 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
2ee10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ee20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 28   module.xColumn(
2ee30 70 43 75 72 73 6f 72 2c 20 70 43 6f 6e 74 65 78  pCursor, pContex
2ee40 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
2ee50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ee60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ee70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2eeb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2eec0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2eed0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2eee0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2eef0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2ef00 65 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74  e.xRowId" /> met
2ef10 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2ef20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ef40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2ef50 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  Cursor">..      
2ef60 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2ef70 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2ef80 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2ef90 2e 78 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68  .xRowId" /> meth
2efa0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2efb0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2efc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2efd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49  param name="rowI
2efe0 64 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d">..           
2eff0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2f000 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2f010 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
2f020 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  Id" /> method...
2f030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f040 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2f050 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2f060 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2f070 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2f080 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2f090 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
2f0a0 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  Id" /> method...
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f0c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2f0d0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2f0e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2f0f0 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20  RowId(..        
2f100 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2f110 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
2f120 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e           ref lon
2f130 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20  g rowId..       
2f140 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2f150 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f160 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f180 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62  / NOTE: Called b
2f190 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a  y native code...
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f1c0 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2f1d0 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50  osed(); /* EXEMP
2f1e0 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  T */....        
2f1f0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
2f200 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f220 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f   return ModuleNo
2f230 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73 6f 72  tAvailableCursor
2f240 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  Error(pCursor);.
2f250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f260 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2f270 2e 78 52 6f 77 49 64 28 70 43 75 72 73 6f 72 2c  .xRowId(pCursor,
2f280 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20   ref rowId);..  
2f290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f2a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2f2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f300 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2f310 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2f320 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2f330 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2f340 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2f350 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2f360 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2f370 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2f380 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2f390 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2f3a0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2f3b0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2f3c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2f3d0 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20 6d 65  e.xUpdate" /> me
2f3e0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2f3f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2f400 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f410 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
2f420 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  gc">..          
2f430 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2f440 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2f450 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
2f460 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
2f470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f480 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2f490 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2f4a0 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d  am name="argv">.
2f4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f4c0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2f4d0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2f4e0 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 22  eModule.xUpdate"
2f4f0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2f500 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2f510 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2f520 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2f530 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
2f540 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2f550 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2f560 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2f570 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2f580 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2f590 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2f5a0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2f5b0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2f5c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2f5d0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2f5e0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2f5f0 64 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e  dule.xUpdate" />
2f600 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2f610 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
2f620 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  rns>..          
2f630 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2f640 72 72 6f 72 43 6f 64 65 20 78 55 70 64 61 74 65  rrorCode xUpdate
2f650 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f660 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
2f670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f680 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2f6a0 50 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  Ptr argv,..     
2f6b0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
2f6c0 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
2f6d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f6e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f710 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64   // NOTE: Called
2f720 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2e   by native code.
2f730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f740 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f750 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69        // CheckDi
2f760 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45 58 45  sposed(); /* EXE
2f770 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  MPT */....      
2f780 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2f790 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7b0 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2f7c0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2f7d0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2f7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7f0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2f800 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 61  xUpdate(pVtab, a
2f810 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20 72  rgc, argv, ref r
2f820 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  owId);..        
2f830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f840 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f880 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f890 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f8a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2f8b0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2f8c0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2f8d0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42  eNativeModule.xB
2f8e0 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  egin" /> method.
2f8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f900 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2f910 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2f920 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
2f930 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2f940 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f950 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f960 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
2f970 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2f980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2f990 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2f9a0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2f9b0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2f9c0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2f9d0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2f9e0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
2f9f0 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2fa00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2fa10 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
2fa20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
2fa30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42  LiteErrorCode xB
2fa40 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
2fa50 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2fa60 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
2fa70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2fa80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fa90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2faa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2fab0 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61  TE: Called by na
2fac0 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20  tive code...    
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2fb00 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f  (); /* EXEMPT */
2fb10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fb20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
2fb30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2fb50 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  urn ModuleNotAva
2fb60 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72  ilableTableError
2fb70 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fb90 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  rn module.xBegin
2fba0 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
2fbb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fbc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fc10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2fc20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fc30 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2fc40 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2fc50 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2fc60 78 53 79 6e 63 22 20 2f 3e 20 6d 65 74 68 6f 64  xSync" /> method
2fc70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2fc80 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2fc90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2fca0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2fcb0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2fcc0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2fcd0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2fce0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e  ativeModule.xSyn
2fcf0 63 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  c" /> method... 
2fd00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2fd10 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2fd20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2fd30 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2fd40 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2fd50 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2fd60 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2fd70 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2fd80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2fd90 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2fda0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2fdb0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79  iteErrorCode xSy
2fdc0 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nc(..           
2fdd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
2fde0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b..             
2fdf0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2fe00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fe10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2fe20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2fe30 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69  : Called by nati
2fe40 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  ve code...      
2fe50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2fe70 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2fe80 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a  ; /* EXEMPT */..
2fe90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fea0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2feb0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2fec0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fed0 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2fee0 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2fef0 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2ff00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ff10 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 28 70 56   module.xSync(pV
2ff20 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
2ff30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ff40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2ff50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ff90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2ffa0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2ffb0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2ffc0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2ffd0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
2ffe0 6d 6d 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  mmit" /> method.
2fff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30000 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
30010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
30020 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
30030 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
30040 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
30050 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
30060 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
30070 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  it" /> method...
30080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30090 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
300a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
300b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
300c0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
300d0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
300e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
300f0 6d 69 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  mit" /> method..
30100 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30110 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
30120 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
30130 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
30140 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
30150 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
30160 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
30170 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
30180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30190 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
301b0 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79   NOTE: Called by
301c0 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20   native code... 
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
301e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
301f0 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
30200 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54  sed(); /* EXEMPT
30210 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
30220 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
30230 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30250 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
30260 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
30270 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30290 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f  eturn module.xCo
302a0 6d 6d 69 74 28 70 56 74 61 62 29 3b 0d 0a 20 20  mmit(pVtab);..  
302b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
302c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30320 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
30330 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
30340 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30350 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
30360 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f  ule.xRollback" /
30370 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30380 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
30390 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
303a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
303b0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
303c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
303d0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
303e0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
303f0 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f  ule.xRollback" /
30400 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30410 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
30420 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
30430 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
30440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30450 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
30460 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
30470 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
30480 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
30490 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
304a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
304b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
304c0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
304d0 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
304e0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
304f0 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
30500 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30510 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30520 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30540 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79 20  NOTE: Called by 
30550 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20 20  native code...  
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30580 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73    // CheckDispos
30590 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54 20  ed(); /* EXEMPT 
305a0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
305b0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
305c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
305e0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
305f0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
30600 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30620 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c  turn module.xRol
30630 6c 62 61 63 6b 28 70 56 74 61 62 29 3b 0d 0a 20  lback(pVtab);.. 
30640 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
30660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
306a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
306b0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
306c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
306d0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
306e0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
306f0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
30700 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
30710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30720 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
30730 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
30740 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
30750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30760 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
30770 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
30780 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
30790 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
307a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
307b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
307c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
307d0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 22  aram name="nArg"
307e0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
307f0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
30800 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
30810 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
30820 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
30830 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
30840 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
30850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
30860 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d  param name="zNam
30870 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e">..           
30880 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
30890 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
308a0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
308b0 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65  dFunction" /> me
308c0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
308d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
308e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
308f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
30900 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20  llback">..      
30910 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
30920 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
30930 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
30940 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20  .xFindFunction" 
30950 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
30960 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
30970 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
30980 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
30990 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61 22 3e  e="pClientData">
309a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
309b0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
309c0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
309d0 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
309e0 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
309f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
30a00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
30a10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
30a20 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
30a30 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
30a40 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
30a50 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
30a60 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f  xFindFunction" /
30a70 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
30a80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
30a90 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
30aa0 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 46     public int xF
30ab0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
30ad0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
30af0 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20   nArg,..        
30b00 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
30b10 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
30b20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
30b30 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  eCallback callba
30b40 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
30b50 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
30b60 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20  pClientData..   
30b70 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
30b80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30ba0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30bb0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c 6c     // NOTE: Call
30bc0 65 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f 64  ed by native cod
30bd0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
30be0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30bf0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
30c00 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20 45  Disposed(); /* E
30c10 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20 20  XEMPT */....    
30c20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30c30 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
30c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30c60 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f          ModuleNo
30c70 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45  tAvailableTableE
30c80 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 20 20  rror(pVtab);..  
30c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ca0 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30cd0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
30ce0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d00 20 20 20 20 70 56 74 61 62 2c 20 6e 41 72 67 2c      pVtab, nArg,
30d10 20 7a 4e 61 6d 65 2c 20 72 65 66 20 63 61 6c 6c   zName, ref call
30d20 62 61 63 6b 2c 20 72 65 66 20 70 43 6c 69 65 6e  back, ref pClien
30d30 74 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  tData);..       
30d40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30d50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
30da0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
30db0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
30dc0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
30dd0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30de0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
30df0 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f  Rename" /> metho
30e00 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
30e10 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
30e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
30e30 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
30e40 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ab">..          
30e50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
30e60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
30e70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
30e80 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  name" /> method.
30e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30ea0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
30eb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
30ec0 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d  am name="zNew">.
30ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
30ee0 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
30ef0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
30f00 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 22  eModule.xRename"
30f10 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
30f20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
30f30 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
30f40 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
30f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30f60 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
30f70 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
30f80 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65  veModule.xRename
30f90 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
30fa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
30fb0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
30fc0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
30fd0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65  iteErrorCode xRe
30fe0 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  name(..         
30ff0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
31000 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
31010 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65        IntPtr zNe
31020 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  w..             
31030 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
31040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31050 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
31060 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
31070 3a 20 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69  : Called by nati
31080 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  ve code...      
31090 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
310b0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
310c0 3b 20 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a  ; /* EXEMPT */..
310d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
310e0 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
310f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
31100 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31110 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
31120 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
31130 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
31140 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31150 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 28   module.xRename(
31160 70 56 74 61 62 2c 20 7a 4e 65 77 29 3b 0d 0a 20  pVtab, zNew);.. 
31170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
31190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
311a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
311b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
311c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
311d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
311e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
311f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
31200 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
31210 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
31220 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22  dule.xSavepoint"
31230 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
31240 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
31250 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
31260 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
31270 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
31280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
31290 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
312a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
312b0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
312c0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
312d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
312e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
312f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
31300 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74 22  ame="iSavepoint"
31310 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
31320 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
31330 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
31340 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70  iveModule.xSavep
31350 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  oint" /> method.
31360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31370 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
31380 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
31390 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
313a0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
313b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
313c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53  eNativeModule.xS
313d0 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74  avepoint" /> met
313e0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
313f0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
31400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
31410 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
31420 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28  Code xSavepoint(
31430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31440 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
31450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31460 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
31470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31480 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
31490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
314a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
314b0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
314c0 43 61 6c 6c 65 64 20 62 79 20 6e 61 74 69 76 65  Called by native
314d0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
314e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
314f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
31500 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
31510 2f 2a 20 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a  /* EXEMPT */....
31520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31530 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
31540 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31550 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31560 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
31570 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  leTableError(pVt
31580 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
31590 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
315a0 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74  odule.xSavepoint
315b0 28 70 56 74 61 62 2c 20 69 53 61 76 65 70 6f 69  (pVtab, iSavepoi
315c0 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
315d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
315e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
315f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31620 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31630 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
31640 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
31650 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
31660 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
31670 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c  ativeModule.xRel
31680 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ease" /> method.
31690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
316a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
316b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
316c0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
316d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
316e0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
316f0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
31700 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
31710 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ase" /> method..
31720 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
31730 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
31740 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
31750 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69  m name="iSavepoi
31760 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  nt">..          
31770 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
31780 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
31790 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  NativeModule.xRe
317a0 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64  lease" /> method
317b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
317c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
317d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
317e0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
317f0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
31800 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
31810 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
31820 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d 65 74 68  Release" /> meth
31830 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
31840 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
31850 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
31860 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  lic SQLiteErrorC
31870 6f 64 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20  ode xRelease(.. 
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
31890 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
318b0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
318d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
31900 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 6c      // NOTE: Cal
31910 6c 65 64 20 62 79 20 6e 61 74 69 76 65 20 63 6f  led by native co
31920 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
31930 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
31940 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
31950 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 2f 2a 20  kDisposed(); /* 
31960 45 58 45 4d 50 54 20 2a 2f 0d 0a 0d 0a 20 20 20  EXEMPT */....   
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31980 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
31990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
319a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64        return Mod
319b0 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54  uleNotAvailableT
319c0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29  ableError(pVtab)
319d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
319e0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
319f0 6c 65 2e 78 52 65 6c 65 61 73 65 28 70 56 74 61  le.xRelease(pVta
31a00 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d  b, iSavepoint);.
31a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
31a80 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
31a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31aa0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
31ab0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
31ac0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
31ad0 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  To" /> method...
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
31af0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
31b10 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
31b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31b30 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
31b40 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
31b50 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
31b60 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ckTo" /> method.
31b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31b80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
31b90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
31ba0 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f  am name="iSavepo
31bb0 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  int">..         
31bc0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
31bd0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
31be0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
31bf0 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d 65  ollbackTo" /> me
31c00 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
31c10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
31c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
31c30 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
31c40 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
31c50 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
31c60 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
31c70 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22 20  le.xRollbackTo" 
31c80 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
31c90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
31ca0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
31cb0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
31cc0 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
31cd0 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
31ce0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
31cf0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
31d00 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76          int iSav
31d10 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  epoint..        
31d20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31d30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31d40 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31d60 20 4e 4f 54 45 3a 20 43 61 6c 6c 65 64 20 62 79   NOTE: Called by
31d70 20 6e 61 74 69 76 65 20 63 6f 64 65 2e 0d 0a 20   native code... 
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31d90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31da0 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
31db0 73 65 64 28 29 3b 20 2f 2a 20 45 58 45 4d 50 54  sed(); /* EXEMPT
31dc0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
31dd0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
31de0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
31e10 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
31e20 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31e40 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 52 6f  eturn module.xRo
31e50 6c 6c 62 61 63 6b 54 6f 28 70 56 74 61 62 2c 20  llbackTo(pVtab, 
31e60 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20  iSavepoint);..  
31e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31e80 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
31e90 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
31ea0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31ef0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
31f00 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
31f10 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
31f20 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
31f30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
31f40 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
31f50 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
31f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
31f70 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
31f80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
31f90 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
31fc0 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
31fe0 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
31ff0 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
32000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
32010 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
32020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32080 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
32090 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
320a0 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
320b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
320c0 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
320d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
320e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
320f0 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20       /// Throws 
32100 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  an <see cref="Ob
32110 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
32120 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69  ption" /> if thi
32130 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
32140 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
32150 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
32160 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
32170 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
32180 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  >..            p
32190 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
321a0 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
321b0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
321c0 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f       {..#if THRO
321d0 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
321f0 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32220 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
32230 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
32240 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32260 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 4e 61   typeof(SQLiteNa
32270 74 69 76 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65  tiveModule).Name
32280 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32290 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
322a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
322b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
322c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
32310 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
32320 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69            /// Di
32330 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f  sposes of this o
32340 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
32350 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
32360 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
32370 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
32380 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
32390 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  ing">..         
323a0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
323b0 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
323c0 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  s being called f
323d0 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20  rom the..       
323e0 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
323f0 65 66 3d 22 44 69 73 70 6f 73 65 28 29 22 20 2f  ef="Dispose()" /
32400 3e 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20  > method.  Zero 
32410 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
32420 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..       
32430 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20       /// called 
32440 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a  from the finaliz
32450 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
32460 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
32470 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
32480 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
32490 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
324a0 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
324b0 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
324c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
324d0 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
324e0 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
324f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32510 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
32520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32530 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
32540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32550 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32570 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
32580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32590 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
325a0 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
325b0 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
325c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
325d0 20 20 20 20 2f 2f 2f 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 0d 0a 20 20 20 20 20 20  ////////..      
32600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32610 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32620 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
32630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32660 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
32670 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
32680 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
326b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
326c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
326d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
326e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
326f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
32700 54 68 65 20 6d 6f 64 75 6c 65 20 69 73 20 6e 6f  The module is no
32710 74 20 6f 77 6e 65 64 20 62 79 20 75 73 3b 20 74  t owned by us; t
32720 68 65 72 65 66 6f 72 65 2c 20 64 6f 20 6e 6f 74  herefore, do not
32730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32740 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
32750 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20  ispose it...    
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32770 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
32780 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
32790 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327b0 20 20 20 20 20 6d 6f 64 75 6c 65 20 3d 20 6e 75       module = nu
327c0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
327d0 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
327e0 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32800 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32810 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
32820 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
32830 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32870 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32880 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
32890 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
328a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
328b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
328c0 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73     /// Finalizes
328d0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
328e0 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
328f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
32900 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
32910 7e 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ~SQLiteNativeMod
32920 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ule()..         
32930 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32940 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
32950 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
32960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32970 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
32980 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32990 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
329a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
329b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
329c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
329d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
329e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
329f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
32a00 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
32a10 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
32a20 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
32a30 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
32a40 75 6c 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  ult version of t
32a50 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
32a60 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
32a70 72 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  re in use...    
32a80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
32a90 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
32aa0 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
32ab0 6e 6c 79 20 69 6e 74 20 44 65 66 61 75 6c 74 4d  nly int DefaultM
32ac0 6f 64 75 6c 65 56 65 72 73 69 6f 6e 20 3d 20 32  oduleVersion = 2
32ad0 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
32ae0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
32af0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32b40 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
32b50 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
32b60 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
32b70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
32b80 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
32b90 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74  to store the nat
32ba0 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
32bb0 6c 65 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20  le structure..  
32bc0 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69        /// associ
32bd0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
32be0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
32bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
32c00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
32c10 20 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e   private UnsafeN
32c20 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
32c30 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69  ite3_module nati
32c40 76 65 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20  veModule;....   
32c50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32ca0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
32cb0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
32cc0 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73  // This field is
32cd0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
32ce0 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 64 65  he destructor de
32cf0 6c 65 67 61 74 65 20 74 6f 20 62 65 20 70 61 73  legate to be pas
32d00 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..        
32d10 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63  /// the SQLite c
32d20 6f 72 65 20 6c 69 62 72 61 72 79 20 76 69 61 20  ore library via 
32d30 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
32d40 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f  te_disposable_mo
32d50 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20  dule()..        
32d60 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  /// function... 
32d70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
32d80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
32d90 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74  rivate UnsafeNat
32da0 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74  iveMethods.xDest
32db0 72 6f 79 4d 6f 64 75 6c 65 20 64 65 73 74 72 6f  royModule destro
32dc0 79 4d 6f 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20  yModule;....    
32dd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32e20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
32e30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
32e40 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
32e50 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
32e60 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
32e70 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f  ative sqlite3_mo
32e80 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dule..        //
32e90 2f 20 73 74 72 75 63 74 75 72 65 20 72 65 74 75  / structure retu
32ea0 72 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  rned by the sqli
32eb0 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f  te3_create_dispo
32ec0 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 0d 0a 20 20  sable_module..  
32ed0 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69        /// functi
32ee0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
32ef0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
32f00 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
32f10 50 74 72 20 64 69 73 70 6f 73 61 62 6c 65 4d 6f  Ptr disposableMo
32f20 64 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dule;....       
32f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
32f80 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
32f90 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
32fa0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
32fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
32fc0 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  is field is used
32fd0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 62 6c 6f   to hold the blo
32fe0 63 6b 20 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d  ck of native mem
32ff0 6f 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ory that contain
33000 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
33010 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
33020 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  3_module structu
33030 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
33040 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a  th this object..
33050 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74          /// inst
33060 61 6e 63 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e  ance when runnin
33070 67 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20 43 6f  g on the .NET Co
33080 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e  mpact Framework.
33090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
330a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
330b0 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
330c0 20 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d   pNativeModule;.
330d0 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
330e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
33130 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
33140 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
33150 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
33160 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
33170 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
33180 6e 73 74 61 6e 63 65 73 20 61 73 73 6f 63 69 61  nstances associa
33190 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
331a0 20 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c   with this modul
331b0 65 2e 20 20 54 68 65 20 6e 61 74 69 76 65 20 70  e.  The native p
331c0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71  ointer to the sq
331d0 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
331e0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
331f0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
33200 64 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68  d to key into th
33210 69 73 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a  is collection...
33220 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
33230 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
33240 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
33250 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74  ry<IntPtr, SQLit
33260 65 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 20 74  eVirtualTable> t
33270 61 62 6c 65 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  ables;....      
33280 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
332d0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
332e0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
332f0 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
33300 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
33310 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
33320 72 73 6f 72 20 69 6e 73 74 61 6e 63 65 73 0d 0a  rsor instances..
33330 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
33340 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
33350 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61   module.  The na
33360 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
33370 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
33380 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
33390 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
333a0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
333b0 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 0d  o key into this.
333c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c  .        /// col
333d0 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  lection...      
333e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
333f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
33400 65 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74  e Dictionary<Int
33410 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75  Ptr, SQLiteVirtu
33420 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 20 63  alTableCursor> c
33430 75 72 73 6f 72 73 3b 0d 0a 0d 0a 20 20 20 20 20  ursors;....     
33440 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
33450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
33490 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
334a0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
334b0 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
334c0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
334d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66   virtual table f
334e0 75 6e 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65  unction instance
334f0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  s..        /// a
33500 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
33510 68 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  his module.  The
33520 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
33530 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 0d  e function name.
33540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64  .        /// and
33550 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
33560 72 67 75 6d 65 6e 74 73 20 28 77 69 74 68 20 2d  rguments (with -
33570 31 20 6d 65 61 6e 69 6e 67 20 22 61 6e 79 22 29  1 meaning "any")
33580 20 61 72 65 20 75 73 65 64 20 74 6f 0d 0a 20 20   are used to..  
33590 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72        /// constr
335a0 75 63 74 20 74 68 65 20 73 74 72 69 6e 67 20 74  uct the string t
335b0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b  hat is used to k
335c0 65 79 20 69 6e 74 6f 20 74 68 69 73 20 63 6f 6c  ey into this col
335d0 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  lection...      
335e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
335f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
33600 65 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  e Dictionary<str
33610 69 6e 67 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ing, SQLiteFunct
33620 69 6f 6e 3e 20 66 75 6e 63 74 69 6f 6e 73 3b 0d  ion> functions;.
33630 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
33640 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
33650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33690 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
336a0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
336b0 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
336c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
336d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
336e0 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
336f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
33700 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
33710 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
33720 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
33730 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
33740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
33750 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f  e name of the mo
33760 64 75 6c 65 2e 20 20 54 68 69 73 20 70 61 72 61  dule.  This para
33770 6d 65 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20  meter cannot be 
33780 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  null...        /
33790 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
337a0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
337b0 74 65 4d 6f 64 75 6c 65 28 73 74 72 69 6e 67 20  teModule(string 
337c0 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  name)..        {
337d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
337e0 20 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d   (name == null).
337f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33800 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
33810 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
33820 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  ("name");....   
33830 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 61           this.na
33840 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20  me = name;..    
33850 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62          this.tab
33860 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  les = new Dictio
33870 6e 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c  nary<IntPtr, SQL
33880 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 3e  iteVirtualTable>
33890 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
338a0 20 74 68 69 73 2e 63 75 72 73 6f 72 73 20 3d 20   this.cursors = 
338b0 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 49  new Dictionary<I
338c0 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72  ntPtr, SQLiteVir
338d0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e  tualTableCursor>
338e0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
338f0 20 74 68 69 73 2e 66 75 6e 63 74 69 6f 6e 73 20   this.functions 
33900 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
33910 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46  <string, SQLiteF
33920 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 20 20 20  unction>();..   
33930 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
33940 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
33950 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
33960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
339a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
339b0 20 49 6e 74 65 72 6e 61 6c 20 4d 65 74 68 6f 64   Internal Method
339c0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
339d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
339e0 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
339f0 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
33a00 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
33a10 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  der to create a 
33a20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  new..        ///
33a30 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75   disposable modu
33a40 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
33a50 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
33a60 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
33a70 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
33a80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
33a90 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
33aa0 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
33ab0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
33ac0 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
33ad0 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
33ae0 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
33af0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
33b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
33b10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
33b20 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e  // Non-zero upon
33b30 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...     
33b40 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
33b50 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
33b60 6e 61 6c 20 62 6f 6f 6c 20 43 72 65 61 74 65 44  nal bool CreateD
33b70 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28  isposableModule(
33b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
33b90 74 50 74 72 20 70 44 62 0d 0a 20 20 20 20 20 20  tPtr pDb..      
33ba0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
33bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33bc0 69 66 20 28 64 69 73 70 6f 73 61 62 6c 65 4d 6f  if (disposableMo
33bd0 64 75 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  dule != IntPtr.Z
33be0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
33bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
33c00 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
33c10 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d    IntPtr pName =
33c20 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
33c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
33c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33c60 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53   pName = SQLiteS
33c70 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
33c80 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29  FromString(name)
33c90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33ca0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
33cb0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33cc0 5f 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f  _module nativeMo
33cd0 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  dule =..        
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 41 6c 6c 6f              Allo
33cf0 63 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  cateNativeModule
33d00 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
33d10 20 20 20 20 20 20 20 64 65 73 74 72 6f 79 4d 6f         destroyMo
33d20 64 75 6c 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  dule = new Unsaf
33d30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
33d40 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65 28 0d 0a  DestroyModule(..
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d60 20 20 20 20 78 44 65 73 74 72 6f 79 4d 6f 64 75      xDestroyModu
33d70 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  le);....#if !PLA
33d80 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
33d90 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
33da0 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 61 62          disposab
33db0 6c 65 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20  leModule =..    
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33de0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
33df0 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f  te_disposable_mo
33e00 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  dule(..         
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
33e20 44 62 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e  Db, pName, ref n
33e30 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74  ativeModule, Int
33e40 50 74 72 2e 5a 65 72 6f 2c 20 64 65 73 74 72 6f  Ptr.Zero, destro
33e50 79 4d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20  yModule);....   
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33e70 75 72 6e 20 28 64 69 73 70 6f 73 61 62 6c 65 4d  urn (disposableM
33e80 6f 64 75 6c 65 20 21 3d 20 49 6e 74 50 74 72 2e  odule != IntPtr.
33e90 5a 65 72 6f 29 3b 0d 0a 23 65 6c 69 66 20 21 53  Zero);..#elif !S
33ea0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 64 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  disposableModule
33ed0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
33ee0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
33ef0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
33f00 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f  te3_create_dispo
33f10 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74  sable_module_int
33f20 65 72 6f 70 28 0d 0a 20 20 20 20 20 20 20 20 20  erop(..         
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
33f40 62 2c 20 70 4e 61 6d 65 2c 20 41 6c 6c 6f 63 61  b, pName, Alloca
33f50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6e  teNativeModuleIn
33f60 74 65 72 6f 70 28 29 2c 0d 0a 20 20 20 20 20 20  terop(),..      
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56   nativeModule.iV
33f90 65 72 73 69 6f 6e 2c 20 6e 61 74 69 76 65 4d 6f  ersion, nativeMo
33fa0 64 75 6c 65 2e 78 43 72 65 61 74 65 2c 0d 0a 20  dule.xCreate,.. 
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fc0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
33fd0 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e 61 74  le.xConnect, nat
33fe0 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
33ff0 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
34000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
34010 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
34020 6f 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f  onnect, nativeMo
34030 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a  dule.xDestroy,..
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34050 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34060 75 6c 65 2e 78 4f 70 65 6e 2c 20 6e 61 74 69 76  ule.xOpen, nativ
34070 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d  eModule.xClose,.
34080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34090 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
340a0 64 75 6c 65 2e 78 46 69 6c 74 65 72 2c 20 6e 61  dule.xFilter, na
340b0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74  tiveModule.xNext
340c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
340d0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
340e0 4d 6f 64 75 6c 65 2e 78 45 6f 66 2c 20 6e 61 74  Module.xEof, nat
340f0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
34100 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
34110 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
34120 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 2c 20  eModule.xRowId, 
34130 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  nativeModule.xUp
34140 64 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  date,..         
34150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
34160 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
34170 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
34180 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20  xSync,..        
34190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
341a0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
341b0 6d 69 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  mit, nativeModul
341c0 65 2e 78 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20  e.xRollback,..  
341d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341e0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
341f0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 2c  e.xFindFunction,
34200 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
34210 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  ename,..        
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
34230 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76  ativeModule.xSav
34240 65 70 6f 69 6e 74 2c 20 6e 61 74 69 76 65 4d 6f  epoint, nativeMo
34250 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 2c 0d 0a  dule.xRelease,..
34260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34270 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
34280 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 2c  ule.xRollbackTo,
34290 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 64 65   IntPtr.Zero, de
342a0 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 0d  stroyModule);...
342b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
342c0 20 72 65 74 75 72 6e 20 28 64 69 73 70 6f 73 61   return (disposa
342d0 62 6c 65 4d 6f 64 75 6c 65 20 21 3d 20 49 6e 74  bleModule != Int
342e0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 23 65 6c 73  Ptr.Zero);..#els
342f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
34300 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
34310 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
34320 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
34330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34340 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
34350 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
34360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34370 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d      if (pName !=
34380 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
343a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
343b0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
343c0 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d  ry.Free(pName);.
343d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
343e0 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74       pName = Int
343f0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
34400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34410 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34420 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34430 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34440 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34490 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
344a0 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
344b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
344c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
344d0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
344e0 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68   is called by th
344f0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
34500 62 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e  brary when the n
34510 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
34520 2f 2f 20 6d 6f 64 75 6c 65 20 61 73 73 6f 63 69  // module associ
34530 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
34540 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69  bject instance i
34550 73 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  s being destroye
34560 64 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f  d due..        /
34570 2f 2f 20 74 6f 20 69 74 73 20 70 61 72 65 6e 74  // to its parent
34580 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 69 6e   connection bein
34590 67 20 63 6c 6f 73 65 64 2e 20 20 49 74 20 6d 61  g closed.  It ma
345a0 79 20 61 6c 73 6f 20 62 65 20 63 61 6c 6c 65 64  y also be called
345b0 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   by..        ///
345c0 20 74 68 65 20 22 76 74 73 68 69 6d 22 20 6d 6f   the "vtshim" mo
345d0 64 75 6c 65 20 69 66 2f 77 68 65 6e 20 74 68 65  dule if/when the
345e0 20 73 71 6c 69 74 65 33 5f 64 69 73 70 6f 73 65   sqlite3_dispose
345f0 5f 6d 6f 64 75 6c 65 28 29 20 66 75 6e 63 74 69  _module() functi
34600 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
34610 69 73 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  is called...    
34620 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
34630 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
34640 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c  <param name="pCl
34650 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20  ientData">..    
34660 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
34670 76 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69  ve user-data poi
34680 6e 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  nter associated 
34690 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65  with this module
346a0 2c 20 61 73 20 69 74 20 77 61 73 0d 0a 20 20 20  , as it was..   
346b0 20 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69 64 65       /// provide
346c0 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
346d0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 68 65  core library whe
346e0 6e 20 74 68 65 20 6e 61 74 69 76 65 20 6d 6f 64  n the native mod
346f0 75 6c 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20  ule instance..  
34700 20 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 63 72        /// was cr
34710 65 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  eated...        
34720 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
34730 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
34740 69 64 20 78 44 65 73 74 72 6f 79 4d 6f 64 75 6c  id xDestroyModul
34750 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34760 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
34770 74 61 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a  ta /* NOT USED *
34780 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
34790 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
347a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
347b0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
347c0 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  : At this point,
347d0 20 6a 75 73 74 20 6d 61 6b 65 20 73 75 72 65 20   just make sure 
347e0 74 68 61 74 20 74 68 69 73 20 6e 61 74 69 76 65  that this native
347f0 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20   module..       
34800 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61       //       ha
34810 6e 64 6c 65 20 69 73 20 6e 6f 74 20 72 65 75 73  ndle is not reus
34820 65 64 2c 20 6e 6f 72 20 70 61 73 73 65 64 20 69  ed, nor passed i
34830 6e 74 6f 20 74 68 65 20 6e 61 74 69 76 65 0d 0a  nto the native..
34840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34850 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 69 73       sqlite3_dis
34860 70 6f 73 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75  pose_module() fu
34870 6e 63 74 69 6f 6e 20 6c 61 74 65 72 20 28 69 2e  nction later (i.
34880 65 2e 20 69 66 2f 77 68 65 6e 0d 0a 20 20 20 20  e. if/when..    
34890 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
348a0 20 74 68 65 20 44 69 73 70 6f 73 65 28 29 20 6d   the Dispose() m
348b0 65 74 68 6f 64 20 6f 66 20 74 68 69 73 20 6f 62  ethod of this ob
348c0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 69 73  ject instance is
348d0 20 63 61 6c 6c 65 64 29 2e 0d 0a 20 20 20 20 20   called)...     
348e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
348f0 20 20 20 20 20 20 20 64 69 73 70 6f 73 61 62 6c         disposabl
34900 65 4d 6f 64 75 6c 65 20 3d 20 49 6e 74 50 74 72  eModule = IntPtr
34910 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
34920 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
34930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34970 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34980 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34990 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74         /// Creat
349a0 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  es and returns t
349b0 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
349c0 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
349d0 65 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  e using the..   
349e0 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75       /// configu
349f0 72 65 64 20 28 6f 72 20 64 65 66 61 75 6c 74 29  red (or default)
34a00 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
34a10 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
34a20 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
34a30 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c 65   interface imple
34a40 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  mentation...    
34a50 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
34a60 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
34a70 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
34a80 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
34a90 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20  e sqlite_module 
34aa0 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
34ab0 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 28  the configured (
34ac0 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  or..        /// 
34ad0 64 65 66 61 75 6c 74 29 20 3c 73 65 65 20 63 72  default) <see cr
34ae0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
34af0 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
34b00 72 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  rface..        /
34b10 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
34b20 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
34b30 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
34b40 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61      private Unsa
34b50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34b60 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 41  sqlite3_module A
34b70 6c 6c 6f 63 61 74 65 4e 61 74 69 76 65 4d 6f 64  llocateNativeMod
34b80 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ule()..        {
34b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
34ba0 74 75 72 6e 20 41 6c 6c 6f 63 61 74 65 4e 61 74  turn AllocateNat
34bb0 69 76 65 4d 6f 64 75 6c 65 28 47 65 74 4e 61 74  iveModule(GetNat
34bc0 69 76 65 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 29  iveModuleImpl())
34bd0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
34be0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34c30 0a 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f  ...#if PLATFORM_
34c40 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
34c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
34c60 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
34c70 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64   /// Creates and
34c80 20 72 65 74 75 72 6e 73 20 61 20 6d 65 6d 6f 72   returns a memor
34c90 79 20 62 6c 6f 63 6b 20 6f 62 74 61 69 6e 65 64  y block obtained
34ca0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65   from the SQLite
34cb0 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 2f   core..        /
34cc0 2f 2f 20 6c 69 62 72 61 72 79 20 75 73 65 64 20  // library used 
34cd0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6e 61 74  to store the nat
34ce0 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ive sqlite3_modu
34cf0 6c 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  le structure for
34d00 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
34d10 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
34d20 63 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20  ce when running 
34d30 6f 6e 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70  on the .NET Comp
34d40 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a  act Framework...
34d50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
34d60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
34d70 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
34d80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
34d90 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
34da0 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   the native sqli
34db0 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63  te3_module struc
34dc0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
34dd0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
34de0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
34df0 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 4e 61  ntPtr AllocateNa
34e00 74 69 76 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f  tiveModuleIntero
34e10 70 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  p()..        {..
34e20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34e30 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d  pNativeModule ==
34e40 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
34e50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e80 20 20 2f 2f 20 48 41 43 4b 3a 20 4e 6f 20 65 61    // HACK: No ea
34e90 73 79 20 77 61 79 20 74 6f 20 64 65 74 65 72 6d  sy way to determ
34ea0 69 6e 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ine the size of 
34eb0 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  the native..    
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34ed0 20 20 20 20 20 73 71 6c 69 74 65 5f 6d 6f 64 75       sqlite_modu
34ee0 6c 65 20 73 74 72 75 63 74 75 72 65 20 77 68 65  le structure whe
34ef0 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65  n running on the
34f00 20 2e 4e 45 54 0d 0a 20 20 20 20 20 20 20 20 20   .NET..         
34f10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
34f20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72  Compact Framewor
34f30 6b 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75  k; therefore, ju
34f40 73 74 20 62 61 73 65 20 74 68 65 20 73 69 7a 65  st base the size
34f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f60 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 20 77 68    //       on wh
34f70 61 74 20 77 65 20 6b 6e 6f 77 3a 0d 0a 20 20 20  at we know:..   
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
34f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34fa0 20 2f 2f 20 20 20 20 20 20 20 54 68 65 72 65 20   //       There 
34fb0 69 73 20 6f 6e 65 20 69 6e 74 65 67 65 72 20 6d  is one integer m
34fc0 65 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ember...        
34fd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
34fe0 20 54 68 65 72 65 20 61 72 65 20 32 32 20 66 75   There are 22 fu
34ff0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 6d  nction pointer m
35000 65 6d 62 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  embers...       
35010 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
35030 74 69 76 65 4d 6f 64 75 6c 65 20 3d 20 53 51 4c  tiveModule = SQL
35040 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61  iteMemory.Alloca
35050 74 65 28 32 33 20 2a 20 49 6e 74 50 74 72 2e 53  te(23 * IntPtr.S
35060 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ize);....       
35070 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61           if (pNa
35080 74 69 76 65 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e  tiveModule == In
35090 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 74 68 72 6f 77 20 6e 65 77 20 4f 75 74 4f 66 4d  throw new OutOfM
350c0 65 6d 6f 72 79 45 78 63 65 70 74 69 6f 6e 28 22  emoryException("
350d0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 29  sqlite3_module")
350e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
350f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35100 72 65 74 75 72 6e 20 70 4e 61 74 69 76 65 4d 6f  return pNativeMo
35110 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dule;..        }
35120 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
35130 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35180 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
35190 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
351a0 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65  / Creates and re
351b0 74 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65  turns the native
351c0 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20 73   sqlite_module s
351d0 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20 74  tructure using t
351e0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
351f0 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
35200 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
35210 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74  veModule" /> int
35220 65 72 66 61 63 65 0d 0a 20 20 20 20 20 20 20 20  erface..        
35230 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
35240 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
35250 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
35260 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
35270 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
35280 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
35290 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
352a0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
352b0 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70  /> interface imp
352c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0d 0a  lementation to..
352d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 2e          /// use.
352e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
352f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
35300 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
35310 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
35320 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64  ative sqlite_mod
35330 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 75 73  ule structure us
35340 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65  ing the specifie
35350 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
35360 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
35370 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
35380 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70 6c  > interface impl
35390 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
353a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
353b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ns>..        pri
353c0 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76  vate UnsafeNativ
353d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
353e0 5f 6d 6f 64 75 6c 65 20 41 6c 6c 6f 63 61 74 65  _module Allocate
353f0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20  NativeModule(.. 
35400 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
35410 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 6d  teNativeModule m
35420 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  odule..         
35430 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
35440 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74  .            nat
35450 69 76 65 4d 6f 64 75 6c 65 20 3d 20 6e 65 77 20  iveModule = new 
35460 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
35470 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ods.sqlite3_modu
35480 6c 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  le();..         
35490 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
354a0 69 56 65 72 73 69 6f 6e 20 3d 20 44 65 66 61 75  iVersion = Defau
354b0 6c 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f 6e 3b  ltModuleVersion;
354c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
354d0 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75  if (module != nu
354e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
354f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35500 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35510 2e 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55  .xCreate = new U
35520 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35530 64 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20  ds.xCreate(..   
35540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35550 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 29 3b  module.xCreate);
35560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35570 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35580 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  .xConnect = new 
35590 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
355a0 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20  ods.xConnect(.. 
355b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355c0 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65     module.xConne
355d0 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
355e0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
355f0 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20  dule.xBestIndex 
35600 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
35610 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74 49  veMethods.xBestI
35620 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
35630 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
35640 65 2e 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a  e.xBestIndex);..
35650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35660 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
35670 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77  Disconnect = new
35680 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
35690 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74  hods.xDisconnect
356a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
356b0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 44         module.xD
356c0 69 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20  isconnect);.... 
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
356e0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73  ativeModule.xDes
356f0 74 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66  troy = new Unsaf
35700 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
35710 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20  Destroy(..      
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
35730 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 29 3b 0d  dule.xDestroy);.
35740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35750 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
35760 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61  xOpen = new Unsa
35770 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35780 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20  xOpen(..        
35790 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
357a0 6c 65 2e 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20  le.xOpen);....  
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
357c0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73  tiveModule.xClos
357d0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
357e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f  tiveMethods.xClo
357f0 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
35800 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
35810 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  xClose);....    
35820 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
35830 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  veModule.xFilter
35840 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
35850 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74  iveMethods.xFilt
35860 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
35870 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
35880 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20  xFilter);....   
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
358a0 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20  iveModule.xNext 
358b0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
358c0 76 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28  veMethods.xNext(
358d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
358e0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4e 65        module.xNe
358f0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
35900 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
35910 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20  dule.xEof = new 
35920 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
35930 6f 64 73 2e 78 45 6f 66 28 6d 6f 64 75 6c 65 2e  ods.xEof(module.
35940 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  xEof);....      
35950 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
35960 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d  Module.xColumn =
35970 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
35980 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e  eMethods.xColumn
35990 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
359a0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43         module.xC
359b0 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  olumn);....     
359c0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
359d0 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d  eModule.xRowId =
359e0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
359f0 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49 64 28  eMethods.xRowId(
35a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a10 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f        module.xRo
35a20 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wId);....       
35a30 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
35a40 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20  odule.xUpdate = 
35a50 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
35a60 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28  Methods.xUpdate(
35a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a80 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 55 70        module.xUp
35a90 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  date);....      
35aa0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
35ab0 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20  Module.xBegin = 
35ac0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
35ad0 4d 65 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 0d  Methods.xBegin(.
35ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35af0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 67       module.xBeg
35b00 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  in);....        
35b10 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
35b20 64 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77  dule.xSync = new
35b30 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
35b40 68 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20  hods.xSync(..   
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b60 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 29 3b 0d   module.xSync);.
35b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35b80 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
35b90 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e  xCommit = new Un
35ba0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
35bb0 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20  s.xCommit(..    
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bd0 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 29 3b  module.xCommit);
35be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35bf0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
35c00 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77  .xRollback = new
35c10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
35c20 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d  hods.xRollback(.
35c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c40 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c       module.xRol
35c50 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
35c60 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
35c70 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
35c80 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61  ction = new Unsa
35c90 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35ca0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cc0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64      module.xFind
35cd0 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  Function);....  
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
35cf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
35d00 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  me = new UnsafeN
35d10 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
35d20 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  name(..         
35d30 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
35d40 65 2e 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20  e.xRename);.... 
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
35d60 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76  ativeModule.xSav
35d70 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73  epoint = new Uns
35d80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35d90 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20  .xSavepoint(..  
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f    module.xSavepo
35dc0 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  int);....       
35dd0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
35de0 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d  odule.xRelease =
35df0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
35e00 65 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73  eMethods.xReleas
35e10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
35e20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
35e30 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20  Release);....   
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
35e50 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
35e60 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61  ackTo = new Unsa
35e70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35e80 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20  xRollbackTo(..  
35e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ea0 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61    module.xRollba
35eb0 63 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckTo);..        
35ec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35ed0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
35ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35ef0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
35f00 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
35f10 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
35f20 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
35f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35f40 20 20 20 20 20 78 43 72 65 61 74 65 29 3b 0d 0a       xCreate);..
35f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35f60 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
35f70 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e  Connect = new Un
35f80 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
35f90 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  s.xConnect(..   
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fb0 20 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20   xConnect);.... 
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
35fd0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
35fe0 74 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73  tIndex = new Uns
35ff0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
36000 2e 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  .xBestIndex(..  
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 20 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a    xBestIndex);..
36030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36040 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
36050 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77  Disconnect = new
36060 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
36070 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74  hods.xDisconnect
36080 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36090 20 20 20 20 20 20 20 78 44 69 73 63 6f 6e 6e 65         xDisconne
360a0 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
360b0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
360c0 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20  dule.xDestroy = 
360d0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
360e0 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79  Methods.xDestroy
360f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36100 20 20 20 20 20 20 20 78 44 65 73 74 72 6f 79 29         xDestroy)
36110 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36120 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
36130 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e  e.xOpen = new Un
36140 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36150 73 2e 78 4f 70 65 6e 28 78 4f 70 65 6e 29 3b 0d  s.xOpen(xOpen);.
36160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36170 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
36180 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  lose = new Unsaf
36190 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
361a0 43 6c 6f 73 65 28 78 43 6c 6f 73 65 29 3b 0d 0a  Close(xClose);..
361b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
361c0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
361d0 46 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73  Filter = new Uns
361e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
361f0 2e 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20  .xFilter(..     
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
36210 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20  Filter);....    
36220 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
36230 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d  veModule.xNext =
36240 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
36250 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 78  eMethods.xNext(x
36260 4e 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  Next);..        
36270 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
36280 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20  dule.xEof = new 
36290 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
362a0 6f 64 73 2e 78 45 6f 66 28 78 45 6f 66 29 3b 0d  ods.xEof(xEof);.
362b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
362c0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
362d0 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e  xColumn = new Un
362e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
362f0 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  s.xColumn(..    
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20  xColumn);....   
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
36330 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64  iveModule.xRowId
36340 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36350 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49  iveMethods.xRowI
36360 64 28 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20  d(xRowId);....  
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
36380 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
36390 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
363a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70  ativeMethods.xUp
363b0 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  date(..         
363c0 20 20 20 20 20 20 20 20 20 20 20 78 55 70 64 61             xUpda
363d0 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
363e0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
363f0 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65  dule.xBegin = ne
36400 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
36410 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 78 42 65  thods.xBegin(xBe
36420 67 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  gin);..         
36430 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
36440 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20  ule.xSync = new 
36450 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36460 6f 64 73 2e 78 53 79 6e 63 28 78 53 79 6e 63 29  ods.xSync(xSync)
36470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36480 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
36490 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20  e.xCommit = new 
364a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
364b0 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20  ods.xCommit(..  
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20    xCommit);.... 
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
364f0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
36500 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61  lback = new Unsa
36510 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
36520 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  xRollback(..    
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36540 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  xRollback);.... 
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
36560 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
36570 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20  dFunction = new 
36580 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36590 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ods.xFindFunctio
365a0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
365b0 20 20 20 20 20 20 20 20 78 46 69 6e 64 46 75 6e          xFindFun
365c0 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  ction);....     
365d0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
365e0 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20  eModule.xRename 
365f0 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
36600 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d  veMethods.xRenam
36610 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
36620 20 20 20 20 20 20 20 20 78 52 65 6e 61 6d 65 29          xRename)
36630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36640 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
36650 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e  e.xSavepoint = n
36660 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
36670 65 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e  ethods.xSavepoin
36680 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36690 20 20 20 20 20 20 20 20 78 53 61 76 65 70 6f 69          xSavepoi
366a0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
366b0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
366c0 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20  dule.xRelease = 
366d0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
366e0 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73 65  Methods.xRelease
366f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36700 20 20 20 20 20 20 20 78 52 65 6c 65 61 73 65 29         xRelease)
36710 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36720 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
36730 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20  e.xRollbackTo = 
36740 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
36750 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
36760 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kTo(..          
36770 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62            xRollb
36780 61 63 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20  ackTo);..       
36790 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
367a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 74        return nat
367b0 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20  iveModule;..    
367c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
367d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
367e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36810 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36820 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
36830 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
36840 72 65 61 74 65 73 20 61 20 63 6f 70 79 20 6f 66  reates a copy of
36850 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
36860 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
36870 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74   cref="UnsafeNat
36880 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
36890 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62  e3_module" /> ob
368a0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2c 0d 0a  ject instance,..
368b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e          /// usin
368c0 67 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d  g default implem
368d0 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 74 68  entations for th
368e0 65 20 63 6f 6e 74 61 69 6e 65 64 20 64 65 6c 65  e contained dele
368f0 67 61 74 65 73 20 77 68 65 6e 0d 0a 20 20 20 20  gates when..    
36900 20 20 20 20 2f 2f 2f 20 6e 65 63 65 73 73 61 72      /// necessar
36910 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
36920 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
36930 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
36940 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
36950 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
36960 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65  see cref="Unsafe
36970 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
36980 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e  lite3_module" />
36990 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
369a0 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 74 6f   /// instance to
369b0 20 63 6f 70 79 2e 0d 0a 20 20 20 20 20 20 20 20   copy...        
369c0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
369d0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
369e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
369f0 20 54 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72   The new <see cr
36a00 65 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65  ef="UnsafeNative
36a10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
36a20 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  module" /> objec
36a30 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
36a40 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
36a50 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
36a60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
36a70 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e UnsafeNativeMe
36a80 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
36a90 64 75 6c 65 20 43 6f 70 79 4e 61 74 69 76 65 4d  dule CopyNativeM
36aa0 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  odule(..        
36ab0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
36ac0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
36ad0 6d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20  module module.. 
36ae0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
36af0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36b00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
36b10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
36b20 5f 6d 6f 64 75 6c 65 20 6e 65 77 4d 6f 64 75 6c  _module newModul
36b30 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
36b40 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e       new UnsafeN
36b50 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
36b60 69 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a  ite3_module();..
36b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
36b80 77 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e  wModule.iVersion
36b90 20 3d 20 6d 6f 64 75 6c 65 2e 69 56 65 72 73 69   = module.iVersi
36ba0 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
36bb0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 72     newModule.xCr
36bc0 65 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  eate = new Unsaf
36bd0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
36be0 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
36bf0 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
36c00 2e 78 43 72 65 61 74 65 20 21 3d 20 6e 75 6c 6c  .xCreate != null
36c10 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61  ) ? module.xCrea
36c20 74 65 20 3a 20 78 43 72 65 61 74 65 29 3b 0d 0a  te : xCreate);..
36c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
36c40 77 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  wModule.xConnect
36c50 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36c60 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e  iveMethods.xConn
36c70 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
36c80 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43        (module.xC
36c90 6f 6e 6e 65 63 74 20 21 3d 20 6e 75 6c 6c 29 20  onnect != null) 
36ca0 3f 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  ? module.xConnec
36cb0 74 20 3a 20 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a  t : xConnect);..
36cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
36cd0 77 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64  wModule.xBestInd
36ce0 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ex = new UnsafeN
36cf0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
36d00 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20  stIndex(..      
36d10 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
36d20 65 2e 78 42 65 73 74 49 6e 64 65 78 20 21 3d 20  e.xBestIndex != 
36d30 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
36d40 42 65 73 74 49 6e 64 65 78 20 3a 20 78 42 65 73  BestIndex : xBes
36d50 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20  tIndex);....    
36d60 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36d70 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20  e.xDisconnect = 
36d80 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
36d90 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e  Methods.xDisconn
36da0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
36db0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44        (module.xD
36dc0 69 73 63 6f 6e 6e 65 63 74 20 21 3d 20 6e 75 6c  isconnect != nul
36dd0 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 69 73  l) ? module.xDis
36de0 63 6f 6e 6e 65 63 74 20 3a 0d 0a 20 20 20 20 20  connect :..     
36df0 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63             xDisc
36e00 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  onnect);....    
36e10 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36e20 65 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77  e.xDestroy = new
36e30 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
36e40 68 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a  hods.xDestroy(..
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 28 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  (module.xDestroy
36e70 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
36e80 6c 65 2e 78 44 65 73 74 72 6f 79 20 3a 20 78 44  le.xDestroy : xD
36e90 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20  estroy);....    
36ea0 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
36eb0 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e  e.xOpen = new Un
36ec0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
36ed0 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20  s.xOpen(..      
36ee0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
36ef0 65 2e 78 4f 70 65 6e 20 21 3d 20 6e 75 6c 6c 29  e.xOpen != null)
36f00 20 3f 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20   ? module.xOpen 
36f10 3a 20 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20  : xOpen);....   
36f20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
36f30 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20  le.xClose = new 
36f40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36f50 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20  ods.xClose(..   
36f60 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
36f70 64 75 6c 65 2e 78 43 6c 6f 73 65 20 21 3d 20 6e  dule.xClose != n
36f80 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43  ull) ? module.xC
36f90 6c 6f 73 65 20 3a 20 78 43 6c 6f 73 65 29 3b 0d  lose : xClose);.
36fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
36fb0 65 77 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  ewModule.xFilter
36fc0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
36fd0 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74  iveMethods.xFilt
36fe0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
36ff0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 46 69       (module.xFi
37000 6c 74 65 72 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  lter != null) ? 
37010 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 3a  module.xFilter :
37020 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20   xFilter);....  
37030 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
37040 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20  ule.xNext = new 
37050 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37060 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20  ods.xNext(..    
37070 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
37080 75 6c 65 2e 78 4e 65 78 74 20 21 3d 20 6e 75 6c  ule.xNext != nul
37090 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4e 65 78  l) ? module.xNex
370a0 74 20 3a 20 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20  t : xNext);.... 
370b0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f             newMo
370c0 64 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20  dule.xEof = new 
370d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
370e0 6f 64 73 2e 78 45 6f 66 28 0d 0a 20 20 20 20 20  ods.xEof(..     
370f0 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
37100 6c 65 2e 78 45 6f 66 20 21 3d 20 6e 75 6c 6c 29  le.xEof != null)
37110 20 3f 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 20 3a   ? module.xEof :
37120 20 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20   xEof);....     
37130 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
37140 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55  .xColumn = new U
37150 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
37160 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20  ds.xColumn(..   
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
37180 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 21 3d 20  dule.xColumn != 
37190 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
371a0 43 6f 6c 75 6d 6e 20 3a 20 78 43 6f 6c 75 6d 6e  Column : xColumn
371b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
371c0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 6f 77    newModule.xRow
371d0 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  Id = new UnsafeN
371e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
371f0 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
37200 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52        (module.xR
37210 6f 77 49 64 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  owId != null) ? 
37220 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3a 20  module.xRowId : 
37230 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20  xRowId);....    
37240 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
37250 65 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20  e.xUpdate = new 
37260 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
37270 6f 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20  ods.xUpdate(..  
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
37290 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 21 3d  odule.xUpdate !=
372a0 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
372b0 78 55 70 64 61 74 65 20 3a 20 78 55 70 64 61 74  xUpdate : xUpdat
372c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
372d0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65     newModule.xBe
372e0 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  gin = new Unsafe
372f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42  NativeMethods.xB
37300 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
37310 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78         (module.x
37320 42 65 67 69 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f  Begin != null) ?
37330 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3a   module.xBegin :
37340 20 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20   xBegin);....   
37350 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
37360 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55  le.xSync = new U
37370 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
37380 64 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20 20  ds.xSync(..     
37390 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
373a0 6c 65 2e 78 53 79 6e 63 20 21 3d 20 6e 75 6c 6c  le.xSync != null
373b0 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63  ) ? module.xSync
373c0 20 3a 20 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20   : xSync);....  
373d0 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
373e0 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65  ule.xCommit = ne
373f0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
37400 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a  thods.xCommit(..
37410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37420 28 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20  (module.xCommit 
37430 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
37440 65 2e 78 43 6f 6d 6d 69 74 20 3a 20 78 43 6f 6d  e.xCommit : xCom
37450 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mit);....       
37460 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78       newModule.x
37470 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55  Rollback = new U
37480 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
37490 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20  ds.xRollback(.. 
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
374b0 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
374c0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
374d0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3a 20 78  le.xRollback : x
374e0 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Rollback);....  
374f0 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
37500 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
37510 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
37520 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e  tiveMethods.xFin
37530 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
37540 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
37550 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
37560 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  n != null) ? mod
37570 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
37580 6e 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n :..           
37590 20 20 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69       xFindFuncti
375a0 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
375b0 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52      newModule.xR
375c0 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61  ename = new Unsa
375d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
375e0 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20  xRename(..      
375f0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
37600 65 2e 78 52 65 6e 61 6d 65 20 21 3d 20 6e 75 6c  e.xRename != nul
37610 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 65 6e  l) ? module.xRen
37620 61 6d 65 20 3a 20 78 52 65 6e 61 6d 65 29 3b 0d  ame : xRename);.
37630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ...            n
37640 65 77 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f  ewModule.xSavepo
37650 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  int = new Unsafe
37660 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
37670 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20  avepoint(..     
37680 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
37690 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 21 3d  le.xSavepoint !=
376a0 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e   null) ? module.
376b0 78 53 61 76 65 70 6f 69 6e 74 20 3a 20 78 53 61  xSavepoint : xSa
376c0 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
376d0 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
376e0 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65  le.xRelease = 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 78 52 65 6c 65 61 73 65 28 0d  thods.xRelease(.
37710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37720 20 28 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73   (module.xReleas
37730 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64  e != null) ? mod
37740 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3a 20 78  ule.xRelease : x
37750 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20  Release);....   
37760 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
37770 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d  le.xRollbackTo =
37780 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
37790 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61  eMethods.xRollba
377a0 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20  ckTo(..         
377b0 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78         (module.x
377c0 52 6f 6c 6c 62 61 63 6b 54 6f 20 21 3d 20 6e 75  RollbackTo != nu
377d0 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f  ll) ? module.xRo
377e0 6c 6c 62 61 63 6b 54 6f 20 3a 0d 0a 20 20 20 20  llbackTo :..    
377f0 20 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c              xRol
37800 6c 62 61 63 6b 54 6f 29 3b 0d 0a 0d 0a 20 20 20  lbackTo);....   
37810 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37820 6e 65 77 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20  newModule;..    
37830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37840 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
37850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
37890 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
378a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
378b0 61 6c 6c 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  alls one of the 
378c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
378d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 74  itialization met
378e0 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  hods...        /
378f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
37900 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
37910 6d 20 6e 61 6d 65 3d 22 63 72 65 61 74 65 22 3e  m name="create">
37920 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
37930 6e 2d 7a 65 72 6f 20 74 6f 20 63 61 6c 6c 20 74  n-zero to call t
37940 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
37950 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
37960 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  le.Create" />.. 
37970 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
37980 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68  d; otherwise, th
37990 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
379a0 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
379b0 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 0d 0a 20  e.Connect" />.. 
379c0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
379d0 64 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64  d will be called
379e0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
379f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
37a00 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
37a10 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20  ="pDb">..       
37a20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
37a30 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
37a40 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  ion handle...   
37a50 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
37a60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
37a70 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78  param name="pAux
37a80 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
37a90 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74  The original nat
37aa0 69 76 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75  ive pointer valu
37ab0 65 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69  e that was provi
37ac0 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ded to the..    
37ad0 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f      /// sqlite3_
37ae0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c  create_module(),
37af0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
37b00 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a  module_v2() or..
37b10 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69          /// sqli
37b20 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f  te3_create_dispo
37b30 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66  sable_module() f
37b40 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  unctions...     
37b50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
37b60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
37b70 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
37b80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
37b90 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
37ba0 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
37bb0 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
37bc0 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
37bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
37be0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
37bf0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
37c00 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgv">..        /
37c10 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
37c20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  string arguments
37c30 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45   from the CREATE
37c40 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a   VIRTUAL TABLE..
37c50 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74          /// stat
37c60 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ement...        
37c70 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
37c80 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37c90 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
37ca0 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
37cb0 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
37cc0 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
37cd0 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69   modified to poi
37ce0 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d  nt to the newly.
37cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65  .        /// cre
37d00 61 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69  ated native sqli
37d10 74 65 33