System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d8d15637ed20b1df58bbca197b89f3aea5adcbcc:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0140: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c  .using System.Gl
0150: 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73  obalization;..us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  es;..using Syste
0190: 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 6e 61 6d 65 73  m.Text;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 6f  #region SQLiteCo
01d0: 6e 74 65 78 74 20 48 65 6c 70 65 72 20 43 6c 61  ntext Helper Cla
01e0: 73 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  ss..    public s
01f0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
0200: 74 65 43 6f 6e 74 65 78 74 0d 0a 20 20 20 20 7b  teContext..    {
0210: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
0220: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
0230: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
0240: 49 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74 3b  IntPtr pContext;
0250: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
0260: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
02c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
02d0: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
02e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
02f0: 6c 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 28  l SQLiteContext(
0300: 49 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74 29  IntPtr pContext)
0310: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0320: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 43           this.pC
0330: 6f 6e 74 65 78 74 20 3d 20 70 43 6f 6e 74 65 78  ontext = pContex
0340: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
0350: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
0360: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
0370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
03c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
03d0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
03e0: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 4e  public void SetN
03f0: 75 6c 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ull()..        {
0400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
0410: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
0420: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
0430: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
0440: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
0450: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
0460: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
0470: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
0480: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
0490: 73 75 6c 74 5f 6e 75 6c 6c 28 70 43 6f 6e 74 65  sult_null(pConte
04a0: 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  xt);..        }.
04b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
04c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0500: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
0510: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 44 6f 75  blic void SetDou
0520: 62 6c 65 28 64 6f 75 62 6c 65 20 76 61 6c 75 65  ble(double value
0530: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
0540: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43            if (pC
0550: 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72  ontext == IntPtr
0560: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
0570: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
0580: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
0590: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
05a0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
05b0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
05c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
05d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
05e0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
05f0: 5f 64 6f 75 62 6c 65 28 70 43 6f 6e 74 65 78 74  _double(pContext
0600: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
0610: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
0620: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  D..            U
0630: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
0640: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
0650: 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  t_double_interop
0660: 28 70 43 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  (pContext, ref v
0670: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
0680: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
0690: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
06a0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
06b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
06c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
06d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0720: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74   public void Set
0730: 49 6e 74 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a  Int(int value)..
0740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0750: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
0760: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
0770: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
0780: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
0790: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
07a0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
07b0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
07c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
07d0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
07e0: 74 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75  t(pContext, valu
07f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
0800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0850: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
0860: 6c 69 63 20 76 6f 69 64 20 53 65 74 49 6e 74 36  lic void SetInt6
0870: 34 28 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  4(long value).. 
0880: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0890: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
08a0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
08b0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
08c0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
08d0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
08e0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 23 69  ception();....#i
08f0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
0900: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0910: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
0920: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
0930: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
0940: 36 34 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c  64(pContext, val
0950: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
0960: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
0970: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
0980: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
0990: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
09a0: 36 34 5f 69 6e 74 65 72 6f 70 28 70 43 6f 6e 74  64_interop(pCont
09b0: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
09c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
09d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
09e0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
09f0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
0a00: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
0a10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0a60: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
0a70: 63 20 76 6f 69 64 20 53 65 74 53 74 72 69 6e 67  c void SetString
0a80: 28 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a  (string value)..
0a90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0aa0: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
0ab0: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
0ac0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
0ad0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
0ae0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
0af0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
0b00: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
0b10: 5d 20 62 79 74 65 73 20 3d 20 53 51 4c 69 74 65  ] bytes = SQLite
0b20: 53 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42 79  String.GetUtf8By
0b30: 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
0b40: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
0b50: 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
0b60: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
0b70: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
0b80: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
0b90: 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75 65 22  xception("value"
0ba0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
0bb0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
0bc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
0bd0: 73 75 6c 74 5f 74 65 78 74 28 0d 0a 20 20 20 20  sult_text(..    
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e              pCon
0bf0: 74 65 78 74 2c 20 62 79 74 65 73 2c 20 62 79 74  text, bytes, byt
0c00: 65 73 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  es.Length, (IntP
0c10: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20  tr)(-1));..     
0c20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
0c80: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
0c90: 65 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20 76  etError(string v
0ca0: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  alue)..        {
0cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
0cc0: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
0cd0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
0cf0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
0d00: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
0d10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
0d20: 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d    byte[] bytes =
0d30: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 47 65   SQLiteString.Ge
0d40: 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74  tUtf8BytesFromSt
0d50: 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ring(value);....
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0d70: 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  bytes == null)..
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d90: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
0da0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
0db0: 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20  "value");....   
0dc0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
0dd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
0de0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
0df0: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
0e00: 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 62 79      pContext, by
0e10: 74 65 73 2c 20 62 79 74 65 73 2e 4c 65 6e 67 74  tes, bytes.Lengt
0e20: 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  h);..        }..
0e30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
0e90: 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f  lic void SetErro
0ea0: 72 43 6f 64 65 28 53 51 4c 69 74 65 45 72 72 6f  rCode(SQLiteErro
0eb0: 72 43 6f 64 65 20 76 61 6c 75 65 29 0d 0a 20 20  rCode value)..  
0ec0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0ed0: 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78       if (pContex
0ee0: 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t == IntPtr.Zero
0ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
0f00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
0f10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
0f20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
0f30: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
0f40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
0f50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
0f60: 72 5f 63 6f 64 65 28 70 43 6f 6e 74 65 78 74 2c  r_code(pContext,
0f70: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
0f80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0fe0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0ff0: 74 45 72 72 6f 72 54 6f 6f 42 69 67 28 29 0d 0a  tErrorTooBig()..
1000: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1010: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
1020: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
1030: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1040: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1050: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1060: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
1070: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
1080: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1090: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
10a0: 72 6f 72 5f 74 6f 6f 62 69 67 28 70 43 6f 6e 74  ror_toobig(pCont
10b0: 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ext);..        }
10c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1120: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1130: 72 6f 72 4e 6f 4d 65 6d 6f 72 79 28 29 0d 0a 20  rorNoMemory().. 
1140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1150: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
1160: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
1170: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1180: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1190: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
11a0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
11b0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
11c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11d0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
11e0: 6f 72 5f 6e 6f 6d 65 6d 28 70 43 6f 6e 74 65 78  or_nomem(pContex
11f0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
1200: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
1260: 6c 69 63 20 76 6f 69 64 20 53 65 74 42 6c 6f 62  lic void SetBlob
1270: 28 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a  (byte[] value)..
1280: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1290: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
12a0: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
12b0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
12c0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12d0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12e0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20  xception();.... 
12f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1300: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1320: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
1330: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
1340: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
1350: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1360: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1370: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
1380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1390: 20 20 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75    pContext, valu
13a0: 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c  e, value.Length,
13b0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
13c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
13d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1420: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
1430: 76 6f 69 64 20 53 65 74 5a 65 72 6f 42 6c 6f 62  void SetZeroBlob
1440: 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  (int value)..   
1450: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1460: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1470: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1490: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
14a0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
14b0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
14c0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
14d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14e0: 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62  te3_result_zerob
14f0: 6c 6f 62 28 70 43 6f 6e 74 65 78 74 2c 20 76 61  lob(pContext, va
1500: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
1510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1570: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
1580: 6c 75 65 28 49 6e 74 50 74 72 20 70 56 61 6c 75  lue(IntPtr pValu
1590: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
15a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
15b0: 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74  Context == IntPt
15c0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
15d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15e0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
15f0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
1600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1610: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1620: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1630: 74 5f 76 61 6c 75 65 28 70 43 6f 6e 74 65 78 74  t_value(pContext
1640: 2c 20 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  , pValue);..    
1650: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1660: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
1670: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
1680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
16e0: 6f 6e 20 53 51 4c 69 74 65 56 61 6c 75 65 20 48  on SQLiteValue H
16f0: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
1700: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
1710: 6c 61 73 73 20 53 51 4c 69 74 65 56 61 6c 75 65  lass SQLiteValue
1720: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1730: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1740: 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
1750: 72 69 76 61 74 65 20 49 6e 74 50 74 72 20 70 56  rivate IntPtr pV
1760: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23  alue;..        #
1770: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1780: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17d0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
17e0: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63  Private Construc
17f0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 69 6e  tors..        in
1800: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 56 61 6c  ternal SQLiteVal
1810: 75 65 28 49 6e 74 50 74 72 20 70 56 61 6c 75 65  ue(IntPtr pValue
1820: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1830: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
1840: 56 61 6c 75 65 20 3d 20 70 56 61 6c 75 65 3b 0d  Value = pValue;.
1850: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1860: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1870: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
18d0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
18e0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
18f0: 69 76 61 74 65 20 76 6f 69 64 20 50 72 65 76 65  ivate void Preve
1900: 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29  ntNativeAccess()
1910: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1920: 20 20 20 20 20 20 20 20 20 70 56 61 6c 75 65 20           pValue 
1930: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1950: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1960: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
19c0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
19d0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
19e0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 73  rivate bool pers
19f0: 69 73 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  isted;..        
1a00: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 73  public bool Pers
1a10: 69 73 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7b  isted..        {
1a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
1a30: 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72 73 69  t { return persi
1a40: 73 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sted; }..       
1a50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ab0: 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74 20   private object 
1ac0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1ad0: 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 56 61  public object Va
1ae0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lue..        {..
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
1b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 69 66 20 28 21 70 65 72 73 69 73 74 65 64 29 0d  if (!persisted).
1b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b50: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1b60: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1b70: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 20 20 20 20 20 22 76 61 6c 75 65 20 77 61 73        "value was
1ba0: 20 6e 6f 74 20 70 65 72 73 69 73 74 65 64 22 29   not persisted")
1bb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
1be0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1bf0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1c00: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1c10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c70: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1c80: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1c90: 20 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66    public TypeAff
1ca0: 69 6e 69 74 79 20 47 65 74 54 79 70 65 41 66 66  inity GetTypeAff
1cb0: 69 6e 69 74 79 28 29 0d 0a 20 20 20 20 20 20 20  inity()..       
1cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cd0: 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
1ce0: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
1cf0: 6e 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  n TypeAffinity.N
1d00: 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  one;..          
1d10: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1d20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1d30: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
1d40: 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  pValue);..      
1d50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1db0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
1dc0: 42 79 74 65 73 28 29 0d 0a 20 20 20 20 20 20 20  Bytes()..       
1dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1de0: 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e  if (pValue == In
1df0: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
1e00: 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n 0;..          
1e10: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1e20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1e30: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
1e40: 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  (pValue);..     
1e50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1eb0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
1ec0: 74 49 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20  tInt()..        
1ed0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1ee0: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
1ef0: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
1f00: 20 64 65 66 61 75 6c 74 28 69 6e 74 29 3b 0d 0a   default(int);..
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f20: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
1f30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
1f40: 61 6c 75 65 5f 69 6e 74 28 70 56 61 6c 75 65 29  alue_int(pValue)
1f50: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1f60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1fc0: 63 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28  c long GetInt64(
1fd0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1fe0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
1ff0: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
2000: 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61  ero) return defa
2010: 75 6c 74 28 6c 6f 6e 67 29 3b 0d 0a 0d 0a 23 69  ult(long);....#i
2020: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
2030: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
2040: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2050: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2060: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
2070: 75 65 5f 69 6e 74 36 34 28 70 56 61 6c 75 65 29  ue_int64(pValue)
2080: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
2090: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
20a0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
20b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
20d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
20e0: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
20f0: 70 56 61 6c 75 65 2c 20 6f 75 74 20 76 61 6c 75  pValue, out valu
2100: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2110: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
2120: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
2130: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
2140: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
2150: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
2160: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2170: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21c0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
21d0: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
21e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
21f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2200: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
2210: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66  Zero) return def
2220: 61 75 6c 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d  ault(double);...
2230: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
2240: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2260: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
2270: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2280: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70 56 61  value_double(pVa
2290: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
22a0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
22c0: 65 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  e value;..      
22d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
22e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
22f0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
2300: 6e 74 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f  nterop(pValue, o
2310: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ut value);..    
2320: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
2330: 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
2340: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
2350: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
2360: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
2370: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2380: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23e0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
23f0: 74 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20  tString()..     
2400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2410: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
2420: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
2430: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2440: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
2450: 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e  LiteString.Strin
2460: 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28  gFromUtf8IntPtr(
2470: 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74 65 73  pValue, GetBytes
2480: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
2490: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
24f0: 62 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74 42  blic byte[] GetB
2500: 6c 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  lob()..        {
2510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2520: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
2530: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
2540: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
2550: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
2560: 4d 61 72 73 68 61 6c 2e 42 79 74 65 73 46 72 6f  Marshal.BytesFro
2570: 6d 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 20  mIntPtr(pValue, 
2580: 47 65 74 42 79 74 65 73 28 29 29 3b 0d 0a 20 20  GetBytes());..  
2590: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
2600: 6c 20 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20  l Persist()..   
2610: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2620: 20 20 20 20 73 77 69 74 63 68 20 28 47 65 74 54      switch (GetT
2630: 79 70 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a  ypeAffinity())..
2640: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2660: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
2670: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d  .Uninitialized:.
2680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2690: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 76 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  value = null;.. 
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d0: 20 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61         PreventNa
26e0: 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20  tiveAccess();.. 
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70         return (p
2710: 65 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29  ersisted = true)
2720: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2730: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2740: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
2750: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
2760: 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4:..            
2770: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2790: 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e     value = GetIn
27a0: 74 36 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  t64();..        
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63  PreventNativeAcc
27d0: 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ess();..        
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 72 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65  return (persiste
2800: 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  d = true);..    
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2830: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
2840: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
2880: 75 65 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29  ue = GetDouble()
2890: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28a0: 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65             Preve
28b0: 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29  ntNativeAccess()
28c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28e0: 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74  n (persisted = t
28f0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
2900: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2920: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
2930: 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  Text:..         
2940: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65        value = Ge
2970: 74 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  tString();..    
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
29a0: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
29d0: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a00: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
2a10: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
2a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2a50: 61 6c 75 65 20 3d 20 47 65 74 42 79 74 65 73 28  alue = GetBytes(
2a60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 50 72 65 76              Prev
2a80: 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73 73 28  entNativeAccess(
2a90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ab0: 72 6e 20 28 70 65 72 73 69 73 74 65 64 20 3d 20  rn (persisted = 
2ac0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2af0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
2b00: 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20  .Null:..        
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44         value = D
2b40: 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20  BNull.Value;..  
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
2b70: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
2ba0: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
2bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2bd0: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
2be0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
2bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c10: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2c50: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2c60: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
2c70: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2c80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2cd0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
2ce0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
2cf0: 69 6e 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f  intOp Enumeratio
2d00: 6e 0d 0a 20 20 20 20 2f 2a 20 5b 46 6c 61 67 73  n..    /* [Flags
2d10: 28 29 5d 20 2a 2f 0d 0a 20 20 20 20 70 75 62 6c  ()] */..    publ
2d20: 69 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 49 6e  ic enum SQLiteIn
2d30: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20  dexConstraintOp 
2d40: 3a 20 62 79 74 65 0d 0a 20 20 20 20 7b 0d 0a 20  : byte..    {.. 
2d50: 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20 3d         EqualTo =
2d60: 20 32 2c 0d 0a 20 20 20 20 20 20 20 20 47 72 65   2,..        Gre
2d70: 61 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 20  aterThan = 4,.. 
2d80: 20 20 20 20 20 20 20 4c 65 73 73 54 68 61 6e 4f         LessThanO
2d90: 72 45 71 75 61 6c 54 6f 20 3d 20 38 2c 0d 0a 20  rEqualTo = 8,.. 
2da0: 20 20 20 20 20 20 20 4c 65 73 73 54 68 61 6e 20         LessThan 
2db0: 3d 20 31 36 2c 0d 0a 20 20 20 20 20 20 20 20 47  = 16,..        G
2dc0: 72 65 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61  reaterThanOrEqua
2dd0: 6c 54 6f 20 3d 20 33 32 2c 0d 0a 20 20 20 20 20  lTo = 32,..     
2de0: 20 20 20 4d 61 74 63 68 20 3d 20 36 34 0d 0a 20     Match = 64.. 
2df0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
2e00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
2e60: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64  region SQLiteInd
2e70: 65 78 43 6f 6e 73 74 72 61 69 6e 74 20 48 65 6c  exConstraint Hel
2e80: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 70  per Class..    p
2e90: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
2ea0: 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  ss SQLiteIndexCo
2eb0: 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 7b 0d  nstraint..    {.
2ec0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2ed0: 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72   Internal Constr
2ee0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
2ef0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
2f00: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d  ndexConstraint(.
2f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
2f20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2f30: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
2f40: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72  onstraint constr
2f50: 61 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  aint..          
2f60: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2f70: 20 3a 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69   : this(constrai
2f80: 6e 74 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73  nt.iColumn, cons
2f90: 74 72 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74  traint.op, const
2fa0: 72 61 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20  raint.usable,.. 
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc0: 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65    constraint.iTe
2fd0: 72 6d 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20  rmOffset)..     
2fe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ff0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
3000: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3010: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
3020: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3070: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
3080: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
3090: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
30a0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
30b0: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
30c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
30d0: 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20  nt iColumn,..   
30e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49           SQLiteI
30f0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70  ndexConstraintOp
3100: 20 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   op,..          
3110: 20 20 62 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a    byte usable,..
3120: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
3130: 69 54 65 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20  iTermOffset..   
3140: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3160: 20 20 20 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20     this.iColumn 
3170: 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20  = iColumn;..    
3180: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 70 20          this.op 
3190: 3d 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  = op;..         
31a0: 20 20 20 74 68 69 73 2e 75 73 61 62 6c 65 20 3d     this.usable =
31b0: 20 75 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20   usable;..      
31c0: 20 20 20 20 20 20 74 68 69 73 2e 69 54 65 72 6d        this.iTerm
31d0: 4f 66 66 73 65 74 20 3d 20 69 54 65 72 6d 4f 66  Offset = iTermOf
31e0: 66 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  fset;..        }
31f0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
3200: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3260: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
3270: 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20   Fields..       
3280: 20 70 75 62 6c 69 63 20 69 6e 74 20 69 43 6f 6c   public int iCol
3290: 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  umn;....        
32a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
32f0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
3300: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70  ndexConstraintOp
3310: 20 6f 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   op;....        
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3370: 20 20 70 75 62 6c 69 63 20 62 79 74 65 20 75 73    public byte us
3380: 61 62 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  able;....       
3390: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33e0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69 54     public int iT
33f0: 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20 20 20 20  ermOffset;..    
3400: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
3410: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
3420: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3480: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e  #region SQLiteIn
3490: 64 65 78 4f 72 64 65 72 42 79 20 48 65 6c 70 65  dexOrderBy Helpe
34a0: 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 70 75 62  r Class..    pub
34b0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
34c0: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
34d0: 72 42 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rBy..    {..    
34e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
34f0: 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72  rnal Constructor
3500: 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
3510: 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  nal SQLiteIndexO
3520: 72 64 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20  rderBy(..       
3530: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
3540: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3550: 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f  _index_orderby o
3560: 72 64 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20  rderBy..        
3570: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
3580: 20 20 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42     : this(orderB
3590: 79 2e 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72  y.iColumn, order
35a0: 42 79 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20  By.desc)..      
35b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35c0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
35d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
35e0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
35f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
3650: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
3660: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
3670: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
3680: 49 6e 64 65 78 4f 72 64 65 72 42 79 28 0d 0a 20  IndexOrderBy(.. 
3690: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
36a0: 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20  Column,..       
36b0: 20 20 20 20 20 62 79 74 65 20 64 65 73 63 0d 0a       byte desc..
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36e0: 20 20 20 20 20 20 74 68 69 73 2e 69 43 6f 6c 75        this.iColu
36f0: 6d 6e 20 3d 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 20  mn = iColumn;.. 
3700: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
3710: 64 65 73 63 20 3d 20 64 65 73 63 3b 0d 0a 20 20  desc = desc;..  
3720: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3730: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
3740: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3790: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
37a0: 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a   Public Fields..
37b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
37c0: 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 2f 2a 20 43  nt iColumn; /* C
37d0: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0d  olumn number */.
37e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
3840: 6c 69 63 20 62 79 74 65 20 64 65 73 63 3b 20 20  lic byte desc;  
3850: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
3860: 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 41 53  C.  False for AS
3870: 43 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 23  C. */..        #
3880: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
3890: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
38a0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
3900: 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  on SQLiteIndexCo
3910: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 48 65  nstraintUsage He
3920: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
3930: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
3940: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ass SQLiteIndexC
3950: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a  onstraintUsage..
3960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
3970: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
3980: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
3990: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
39a0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
39b0: 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20 20  aintUsage(..    
39c0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
39d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
39e0: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
39f0: 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73 74  aint_usage const
3a00: 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 20 20  raintUsage..    
3a10: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
3a20: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 63 6f         : this(co
3a30: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e 61 72  nstraintUsage.ar
3a40: 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73 74 72 61  gvIndex, constra
3a50: 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74 29 0d 0a  intUsage.omit)..
3a60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a70: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
3a80: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
3a90: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
3aa0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3b00: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
3b10: 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  e Constructors..
3b20: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
3b30: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
3b40: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
3b50: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
3b60: 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  vIndex,..       
3b70: 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74 0d 0a       byte omit..
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
3b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3ba0: 20 20 20 20 20 20 74 68 69 73 2e 61 72 67 76 49        this.argvI
3bb0: 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64 65 78  ndex = argvIndex
3bc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
3bd0: 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69 74 3b  his.omit = omit;
3be0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3bf0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
3c00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c50: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
3c60: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65  egion Public Fie
3c70: 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  lds..        pub
3c80: 6c 69 63 20 69 6e 74 20 61 72 67 76 49 6e 64 65  lic int argvInde
3c90: 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  x;....        //
3ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ce0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3cf0: 20 70 75 62 6c 69 63 20 62 79 74 65 20 6f 6d 69   public byte omi
3d00: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  t;..        #end
3d10: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
3d20: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3d30: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
3d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d80: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
3d90: 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74  SQLiteIndexInput
3da0: 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  s Helper Class..
3db0: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
3dc0: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
3dd0: 64 65 78 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b  dexInputs..    {
3de0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
3df0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
3e00: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
3e10: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
3e20: 49 6e 64 65 78 49 6e 70 75 74 73 28 69 6e 74 20  IndexInputs(int 
3e30: 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20 69 6e 74  nConstraint, int
3e40: 20 6e 4f 72 64 65 72 42 79 29 0d 0a 20 20 20 20   nOrderBy)..    
3e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3e60: 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 3d     constraints =
3e70: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
3e80: 43 6f 6e 73 74 72 61 69 6e 74 5b 6e 43 6f 6e 73  Constraint[nCons
3e90: 74 72 61 69 6e 74 5d 3b 0d 0a 20 20 20 20 20 20  traint];..      
3ea0: 20 20 20 20 20 20 6f 72 64 65 72 42 79 73 20 3d        orderBys =
3eb0: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
3ec0: 4f 72 64 65 72 42 79 5b 6e 4f 72 64 65 72 42 79  OrderBy[nOrderBy
3ed0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ];..        }.. 
3ee0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
3ef0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
3f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3f50: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
3f60: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
3f70: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
3f80: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
3f90: 5b 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3b 0d  [] constraints;.
3fa0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3fb0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
3fc0: 72 61 69 6e 74 5b 5d 20 43 6f 6e 73 74 72 61 69  raint[] Constrai
3fd0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nts..        {..
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
3ff0: 7b 20 72 65 74 75 72 6e 20 63 6f 6e 73 74 72 61  { return constra
4000: 69 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ints; }..       
4010: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
4020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4070: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49   private SQLiteI
4080: 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 6f 72  ndexOrderBy[] or
4090: 64 65 72 42 79 73 3b 0d 0a 20 20 20 20 20 20 20  derBys;..       
40a0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
40b0: 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f 72 64  dexOrderBy[] Ord
40c0: 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20 20 7b  erBys..        {
40d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
40e0: 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72  t { return order
40f0: 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Bys; }..        
4100: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
4110: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
4120: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
4130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4180: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
4190: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
41a0: 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  s Helper Class..
41b0: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
41c0: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
41d0: 64 65 78 4f 75 74 70 75 74 73 0d 0a 20 20 20 20  dexOutputs..    
41e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
41f0: 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73  on Internal Cons
4200: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
4210: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
4220: 65 49 6e 64 65 78 4f 75 74 70 75 74 73 28 69 6e  eIndexOutputs(in
4230: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 29 0d 0a  t nConstraint)..
4240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4250: 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
4260: 74 55 73 61 67 65 73 20 3d 20 6e 65 77 20 53 51  tUsages = new SQ
4270: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
4280: 69 6e 74 55 73 61 67 65 5b 6e 43 6f 6e 73 74 72  intUsage[nConstr
4290: 61 69 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 20 20  aint];..        
42a0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
42b0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
42c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
42d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4300: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4310: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
4320: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
4330: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
4340: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
4350: 61 69 6e 74 55 73 61 67 65 5b 5d 20 63 6f 6e 73  aintUsage[] cons
4360: 74 72 61 69 6e 74 55 73 61 67 65 73 3b 0d 0a 20  traintUsages;.. 
4370: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
4380: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
4390: 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e 73 74  intUsage[] Const
43a0: 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20 20 20  raintUsages..   
43b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
43c0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
43d0: 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
43e0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s; }..        }.
43f0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4440: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
4450: 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e  ivate int indexN
4460: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
4470: 70 75 62 6c 69 63 20 69 6e 74 20 49 6e 64 65 78  public int Index
4480: 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20  Number..        
4490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
44a0: 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65  et { return inde
44b0: 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20  xNumber; }..    
44c0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
44d0: 64 65 78 4e 75 6d 62 65 72 20 3d 20 76 61 6c 75  dexNumber = valu
44e0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
44f0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4540: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
4550: 69 76 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64  ivate string ind
4560: 65 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20  exString;..     
4570: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
4580: 20 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a 20 20   IndexString..  
4590: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
45a0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
45b0: 6e 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d  n indexString; }
45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
45d0: 74 20 7b 20 69 6e 64 65 78 53 74 72 69 6e 67 20  t { indexString 
45e0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
45f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4600: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4640: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4650: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
4660: 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  needToFreeIndexS
4670: 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  tring;..        
4680: 70 75 62 6c 69 63 20 69 6e 74 20 4e 65 65 64 54  public int NeedT
4690: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
46a0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
46b0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
46c0: 65 74 75 72 6e 20 6e 65 65 64 54 6f 46 72 65 65  eturn needToFree
46d0: 49 6e 64 65 78 53 74 72 69 6e 67 3b 20 7d 0d 0a  IndexString; }..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
46f0: 7b 20 6e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  { needToFreeInde
4700: 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75 65 3b  xString = value;
4710: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
4720: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
4780: 61 74 65 20 69 6e 74 20 6f 72 64 65 72 42 79 43  ate int orderByC
4790: 6f 6e 73 75 6d 65 64 3b 0d 0a 20 20 20 20 20 20  onsumed;..      
47a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4f 72 64    public int Ord
47b0: 65 72 42 79 43 6f 6e 73 75 6d 65 64 0d 0a 20 20  erByConsumed..  
47c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
47d0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
47e0: 6e 20 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  n orderByConsume
47f0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
4800: 20 20 73 65 74 20 7b 20 6f 72 64 65 72 42 79 43    set { orderByC
4810: 6f 6e 73 75 6d 65 64 20 3d 20 76 61 6c 75 65 3b  onsumed = value;
4820: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
4830: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
4840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
4890: 61 74 65 20 64 6f 75 62 6c 65 20 65 73 74 69 6d  ate double estim
48a0: 61 74 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20 20  atedCost;..     
48b0: 20 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65     public double
48c0: 20 45 73 74 69 6d 61 74 65 64 43 6f 73 74 0d 0a   EstimatedCost..
48d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
48e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
48f0: 75 72 6e 20 65 73 74 69 6d 61 74 65 64 43 6f 73  urn estimatedCos
4900: 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
4910: 20 20 73 65 74 20 7b 20 65 73 74 69 6d 61 74 65    set { estimate
4920: 64 43 6f 73 74 20 3d 20 76 61 6c 75 65 3b 20 7d  dCost = value; }
4930: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
4940: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
4950: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
4960: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
49c0: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
49d0: 6e 64 65 78 20 48 65 6c 70 65 72 20 43 6c 61 73  ndex Helper Clas
49e0: 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  s..    public se
49f0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
4a00: 65 49 6e 64 65 78 0d 0a 20 20 20 20 7b 0d 0a 20  eIndex..    {.. 
4a10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
4a20: 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63  nternal Construc
4a30: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 69 6e  tors..        in
4a40: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
4a50: 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex(..           
4a60: 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74   int nConstraint
4a70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
4a80: 6e 74 20 6e 4f 72 64 65 72 42 79 0d 0a 20 20 20  nt nOrderBy..   
4a90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4ab0: 20 20 20 69 6e 70 75 74 73 20 3d 20 6e 65 77 20     inputs = new 
4ac0: 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74  SQLiteIndexInput
4ad0: 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c 20 6e  s(nConstraint, n
4ae0: 4f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20 20 20  OrderBy);..     
4af0: 20 20 20 20 20 20 20 6f 75 74 70 75 74 73 20 3d         outputs =
4b00: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
4b10: 4f 75 74 70 75 74 73 28 6e 43 6f 6e 73 74 72 61  Outputs(nConstra
4b20: 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  int);..        }
4b30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
4b40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4ba0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
4bb0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
4bc0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
4bd0: 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20  LiteIndexInputs 
4be0: 69 6e 70 75 74 73 3b 0d 0a 20 20 20 20 20 20 20  inputs;..       
4bf0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
4c00: 64 65 78 49 6e 70 75 74 73 20 49 6e 70 75 74 73  dexInputs Inputs
4c10: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4c20: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
4c30: 65 74 75 72 6e 20 69 6e 70 75 74 73 3b 20 7d 0d  eturn inputs; }.
4c40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4c50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4ca0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
4cb0: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70   SQLiteIndexOutp
4cc0: 75 74 73 20 6f 75 74 70 75 74 73 3b 0d 0a 20 20  uts outputs;..  
4cd0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
4ce0: 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20  iteIndexOutputs 
4cf0: 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20  Outputs..       
4d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4d10: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 75 74  get { return out
4d20: 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  puts; }..       
4d30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
4d40: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
4d50: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
4d60: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
4d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4db0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
4dc0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
4dd0: 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20  le Base Class.. 
4de0: 20 20 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44     /* NOT SEALED
4df0: 20 2a 2f 0d 0a 20 20 20 20 70 75 62 6c 69 63 20   */..    public 
4e00: 63 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72 74  class SQLiteVirt
4e10: 75 61 6c 54 61 62 6c 65 20 3a 20 49 53 51 4c 69  ualTable : ISQLi
4e20: 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 2c 20  teNativeHandle, 
4e30: 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
4e40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
4e50: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
4e60: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70  tants..        p
4e70: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
4e80: 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65 78   ModuleNameIndex
4e90: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70   = 0;..        p
4ea0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
4eb0: 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e 64   DatabaseNameInd
4ec0: 65 78 20 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20  ex = 1;..       
4ed0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
4ee0: 6e 74 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65  nt TableNameInde
4ef0: 78 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 20 20  x = 2;..        
4f00: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
4f10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4f60: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
4f70: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
4f80: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75  tors..        pu
4f90: 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74 75  blic SQLiteVirtu
4fa0: 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  alTable(..      
4fb0: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
4fc0: 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
4fd0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4ff0: 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20 3d  this.arguments =
5000: 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20   arguments;..   
5010: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5020: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5030: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5080: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
5090: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
50a0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
50b0: 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72 67  ate string[] arg
50c0: 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20  uments;..       
50d0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
50e0: 73 74 72 69 6e 67 5b 5d 20 41 72 67 75 6d 65 6e  string[] Argumen
50f0: 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ts..        {.. 
5100: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5110: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5120: 3b 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e  ; return argumen
5130: 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ts; }..        }
5140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
51a0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74  ublic virtual st
51b0: 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 61 6d 65 0d  ring ModuleName.
51c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
51d0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
51e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
5200: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
5230: 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d  ts = Arguments;.
5240: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5250: 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74     if ((argument
5260: 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  s != null) &&.. 
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65     (arguments.Le
5290: 6e 67 74 68 20 3e 20 4d 6f 64 75 6c 65 4e 61 6d  ngth > ModuleNam
52a0: 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20  eIndex))..      
52b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52d0: 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74   return argument
52e0: 73 5b 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65  s[ModuleNameInde
52f0: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
5300: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5310: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5340: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
5350: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5360: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5370: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5380: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
53e0: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
53f0: 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65 0d  ng DatabaseName.
5400: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5410: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5430: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
5440: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e  string[] argumen
5470: 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d  ts = Arguments;.
5480: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5490: 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74     if ((argument
54a0: 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  s != null) &&.. 
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54c0: 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65     (arguments.Le
54d0: 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73 65 4e  ngth > DatabaseN
54e0: 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20  ameIndex))..    
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5510: 20 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65     return argume
5520: 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d 65  nts[DatabaseName
5530: 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  Index];..       
5540: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5550: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
5560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5580: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5590: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
55a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
55b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
55c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
55d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5620: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
5630: 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65  string TableName
5640: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5650: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
5660: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5680: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
5690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
56a0: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
56b0: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
56c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
56d0: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
56e0: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5700: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
5710: 65 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d  ength > TableNam
5720: 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20  eIndex))..      
5730: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5750: 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e 74   return argument
5760: 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  s[TableNameIndex
5770: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
5780: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5790: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
57d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
57f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5800: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5810: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
5820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5860: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5870: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
5880: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
5890: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62  public virtual b
58a0: 6f 6f 6c 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20  ool Rename(..   
58b0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
58c0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..          
58d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
58f0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
5900: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5910: 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e 75  (arguments != nu
5920: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
5930: 20 20 20 20 20 20 20 20 28 61 72 67 75 6d 65 6e          (argumen
5940: 74 73 2e 4c 65 6e 67 74 68 20 3e 20 54 61 62 6c  ts.Length > Tabl
5950: 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20  eNameIndex))..  
5960: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
5980: 75 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61 6d 65  uments[TableName
5990: 49 6e 64 65 78 5d 20 3d 20 6e 61 6d 65 3b 0d 0a  Index] = name;..
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59b0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
59c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
59d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
59e0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
59f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
5a00: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
5a10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5a60: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
5a70: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
5a80: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
5a90: 20 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74     private IntPt
5aa0: 72 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d  r nativeHandle;.
5ab0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
5ac0: 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 4e  virtual IntPtr N
5ad0: 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20  ativeHandle..   
5ae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5af0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5b00: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5b10: 6e 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 20  n nativeHandle; 
5b20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
5b30: 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61  nternal set { na
5b40: 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c  tiveHandle = val
5b50: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ue; }..        }
5b60: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5b70: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5bd0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
5be0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
5bf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
5c00: 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
5c10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5c20: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
5c30: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
5c40: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
5c50: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
5c60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5c70: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5c80: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5cd0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
5ce0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
5cf0: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
5d00: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
5d10: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
5d20: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
5d30: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
5d40: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
5d50: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
5d60: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
5d70: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SED..           
5d80: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5db0: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
5dc0: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
5dd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5de0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
5df0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
5e00: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
5e10: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
5e20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
5e30: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5e80: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
5e90: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
5ea0: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
5eb0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
5ec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ed0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5f00: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
5f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5f20: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
5f30: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
5f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f70: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
5f80: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
5f90: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5fb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fd0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
5fe0: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
5ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6000: 20 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 0d 0a 20 20 20 20 20 20 20  ///////..       
6030: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
6040: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
6050: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
6060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6070: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6090: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
60a0: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
60b0: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
60c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
60d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
60e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
60f0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
6100: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6150: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
6160: 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  on SQLiteVirtual
6170: 54 61 62 6c 65 43 75 72 73 6f 72 20 42 61 73 65  TableCursor Base
6180: 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2a 20 4e   Class..    /* N
6190: 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20  OT SEALED */..  
61a0: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
61b0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
61c0: 65 43 75 72 73 6f 72 20 3a 20 49 53 51 4c 69 74  eCursor : ISQLit
61d0: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 2c 20 49  eNativeHandle, I
61e0: 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  Disposable..    
61f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
6200: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
6210: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
6220: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72  public SQLiteVir
6230: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
6240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
6250: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
6260: 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
6270: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
6280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6290: 69 73 2e 74 61 62 6c 65 20 3d 20 74 61 62 6c 65  is.table = table
62a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
62b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
62c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6320: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
6330: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
6340: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
6350: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
6360: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  le;..        pub
6370: 6c 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69  lic virtual SQLi
6380: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54  teVirtualTable T
6390: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
63a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
63b0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
63c0: 28 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65  (); return table
63d0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
63e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
63f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
6440: 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75  vate int indexNu
6450: 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 70  mber;..        p
6460: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 69 6e  ublic virtual in
6470: 74 20 49 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20  t IndexNumber.. 
6480: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6490: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
64a0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
64b0: 75 72 6e 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  urn indexNumber;
64c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
64d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
6530: 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64 65 78  ate string index
6540: 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20  String;..       
6550: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
6560: 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69  string IndexStri
6570: 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ng..        {.. 
6580: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
6590: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
65a0: 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74  ; return indexSt
65b0: 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ring; }..       
65c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6610: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6620: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56   private SQLiteV
6630: 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a  alue[] values;..
6640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
6650: 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61 6c  irtual SQLiteVal
6660: 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20 20  ue[] Values..   
6670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6680: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
6690: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
66a0: 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20 20  n values; }..   
66b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
66c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
66d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
66e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6720: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
6730: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
6740: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ds..        prot
6750: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 69 6e  ected virtual in
6760: 74 20 54 72 79 50 65 72 73 69 73 74 56 61 6c 75  t TryPersistValu
6770: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
6780: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76   SQLiteValue[] v
6790: 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20  alues..         
67a0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
67b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
67c0: 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a   result = 0;....
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
67e0: 76 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  values != null).
67f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6810: 66 6f 72 65 61 63 68 20 28 53 51 4c 69 74 65 56  foreach (SQLiteV
6820: 61 6c 75 65 20 76 61 6c 75 65 20 69 6e 20 76 61  alue value in va
6830: 6c 75 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  lues)..         
6840: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6860: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
6870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6880: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
6890: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
68a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
68b0: 61 6c 75 65 2e 50 65 72 73 69 73 74 28 29 29 0d  alue.Persist()).
68c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
68d0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b           result+
68e0: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
68f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6900: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6910: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
6920: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
6930: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6940: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
69a0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
69b0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
69c0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 76  public virtual v
69d0: 6f 69 64 20 46 69 6c 74 65 72 28 0d 0a 20 20 20  oid Filter(..   
69e0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
69f0: 65 78 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20  exNumber,..     
6a00: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
6a10: 64 65 78 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  dexString,..    
6a20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
6a30: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20  lue[] values..  
6a40: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6a50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6a60: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6a70: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6a80: 20 20 20 20 69 66 20 28 28 76 61 6c 75 65 73 20      if ((values 
6a90: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 72               (Tr
6ab0: 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 76  yPersistValues(v
6ac0: 61 6c 75 65 73 29 20 21 3d 20 76 61 6c 75 65 73  alues) != values
6ad0: 2e 4c 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20  .Length))..     
6ae0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6af0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
6b00: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6b10: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
6b20: 20 20 20 20 20 20 20 20 20 20 22 66 61 69 6c 65            "faile
6b30: 64 20 74 6f 20 70 65 72 73 69 73 74 20 6f 6e 65  d to persist one
6b40: 20 6f 72 20 6d 6f 72 65 20 76 61 6c 75 65 73 22   or more values"
6b50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6b60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6b70: 20 74 68 69 73 2e 69 6e 64 65 78 4e 75 6d 62 65   this.indexNumbe
6b80: 72 20 3d 20 69 6e 64 65 78 4e 75 6d 62 65 72 3b  r = indexNumber;
6b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6ba0: 69 73 2e 69 6e 64 65 78 53 74 72 69 6e 67 20 3d  is.indexString =
6bb0: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
6bc0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
6bd0: 76 61 6c 75 65 73 20 3d 20 76 61 6c 75 65 73 3b  values = values;
6be0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6bf0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6c00: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
6c60: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74  egion ISQLiteNat
6c70: 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72  iveHandle Member
6c80: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
6c90: 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76 65  te IntPtr native
6ca0: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
6cb0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
6cc0: 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e  IntPtr NativeHan
6cd0: 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dle..        {..
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
6cf0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6d00: 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65  ); return native
6d10: 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20 20  Handle; }..     
6d20: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
6d30: 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e 64  set { nativeHand
6d40: 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  le = value; }.. 
6d50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6d60: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6d70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
6dd0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
6de0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
6df0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
6e00: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ose()..        {
6e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69  ..            Di
6e20: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
6e30: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
6e40: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
6e50: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  is);..        }.
6e60: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
6e70: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ec0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6ed0: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
6ee0: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
6ef0: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
6f00: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
6f10: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
6f20: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
6f30: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
6f40: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
6f50: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
6f60: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
6f70: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
6f80: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
6f90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6fa0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
6fb0: 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45   ObjectDisposedE
6fc0: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
6fe0: 79 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74  ypeof(SQLiteVirt
6ff0: 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 29 2e  ualTableCursor).
7000: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
7010: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
7020: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7030: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7080: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
7090: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
70a0: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
70b0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
70c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
70d0: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
70e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
70f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
7100: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7120: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
7130: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
7140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7170: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
7180: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
7190: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
71b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
71e0: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7220: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
7230: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
7240: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
7250: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
72a0: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
72b0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
72c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
72e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
72f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7340: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
7350: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
7360: 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75 61 6c    ~SQLiteVirtual
7370: 54 61 62 6c 65 43 75 72 73 6f 72 28 29 0d 0a 20  TableCursor().. 
7380: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7390: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
73a0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lse);..        }
73b0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
73c0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
73d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
73e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7430: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53  ..    #region IS
7440: 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c  QLiteNativeHandl
7450: 65 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20  e Interface..   
7460: 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63   public interfac
7470: 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48  e ISQLiteNativeH
7480: 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  andle..    {..  
7490: 20 20 20 20 20 20 49 6e 74 50 74 72 20 4e 61 74        IntPtr Nat
74a0: 69 76 65 48 61 6e 64 6c 65 20 7b 20 67 65 74 3b  iveHandle { get;
74b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
74c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
74d0: 20 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 2f 2f 2f 2f  ////////////////
74f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7520: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
7530: 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20  iteNativeModule 
7540: 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 70  Interface..    p
7550: 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20  ublic interface 
7560: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
7570: 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ule..    {..    
7580: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7590: 6f 64 65 20 78 43 72 65 61 74 65 28 0d 0a 20 20  ode xCreate(..  
75a0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
75b0: 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20   pDb,..         
75c0: 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d     IntPtr pAux,.
75d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
75e0: 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
75f0: 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67      IntPtr[] arg
7600: 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  v,..            
7610: 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62  ref IntPtr pVtab
7620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
7630: 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72  ef IntPtr pError
7640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
7650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
76b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
76c0: 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
76d0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
76e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
76f0: 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
7700: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
7710: 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
7720: 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a  IntPtr[] argv,..
7730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
7740: 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
7750: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
7760: 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20  ntPtr pError..  
7770: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
7780: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
77d0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
77e0: 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 73 74  eErrorCode xBest
77f0: 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20  Index(..        
7800: 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
7810: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
7820: 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20  ntPtr pIndex..  
7830: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
7840: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7890: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
78a0: 65 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63  eErrorCode xDisc
78b0: 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
78c0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
78d0: 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
78e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
7930: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7940: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7950: 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20  xDestroy(..     
7960: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
7970: 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
7980: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
79e0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
79f0: 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20  e xOpen(..      
7a00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
7a10: 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
7a20: 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 75 72   ref IntPtr pCur
7a30: 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
7a40: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
7a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7aa0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7ab0: 65 20 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20  e xClose(..     
7ac0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
7ad0: 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
7ae0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
7af0: 20 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 2f 2f 2f  ////////////////
7b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7b40: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7b50: 6f 64 65 20 78 46 69 6c 74 65 72 28 0d 0a 20 20  ode xFilter(..  
7b60: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
7b70: 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
7b80: 20 20 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75         int idxNu
7b90: 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
7ba0: 49 6e 74 50 74 72 20 69 64 78 53 74 72 2c 0d 0a  IntPtr idxStr,..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
7bc0: 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
7bd0: 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67 76     IntPtr[] argv
7be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
7bf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
7c50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
7c60: 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
7c70: 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
7c80: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
7c90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
7ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7cf0: 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20  int xEof(..     
7d00: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
7d10: 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
7d20: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
7d30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7d80: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7d90: 6f 64 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20  ode xColumn(..  
7da0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
7db0: 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20   pCursor,..     
7dc0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
7dd0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  ontext,..       
7de0: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a       int index..
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
7e00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
7e60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
7e70: 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  wId(..          
7e80: 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
7e90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
7ea0: 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20  ef long rowId.. 
7eb0: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
7ec0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7f20: 74 65 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64  teErrorCode xUpd
7f30: 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
7f40: 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
7f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
7f60: 20 6e 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20   nData,..       
7f70: 20 20 20 20 20 49 6e 74 50 74 72 20 61 70 44 61       IntPtr apDa
7f80: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
7f90: 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d   ref long rowId.
7fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
7fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
8010: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42  LiteErrorCode xB
8020: 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  egin(..         
8030: 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
8040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
8050: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
80b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53  LiteErrorCode xS
80c0: 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
80d0: 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
80f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8140: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
8150: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f  iteErrorCode xCo
8160: 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
8170: 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
8180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
8190: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
81f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52  LiteErrorCode xR
8200: 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  ollback(..      
8210: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
8220: 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ab..            
8230: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8290: 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63 74 69   int xFindFuncti
82a0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
82b0: 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
82d0: 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  nArg,..         
82e0: 20 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c     IntPtr zName,
82f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8300: 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  f SQLiteCallback
8310: 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
8320: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
8330: 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a  tr pClientData..
8340: 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
8350: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
83b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65  iteErrorCode xRe
83c0: 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  name(..         
83d0: 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
83e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
83f0: 74 50 74 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20  tPtr zNew..     
8400: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
8410: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8460: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8470: 72 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69  rorCode xSavepoi
8480: 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
8490: 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
84b0: 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20  iSavepoint..    
84c0: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
84d0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8520: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
8530: 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73  rrorCode xReleas
8540: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
8550: 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
8560: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
8570: 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
8580: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
8590: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
85a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
85e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
85f0: 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63  rorCode xRollbac
8600: 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kTo(..          
8610: 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
8620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
8630: 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20   iSavepoint..   
8640: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20 20           );..   
8650: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
8660: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
86c0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d 61 6e 61  gion ISQLiteMana
86d0: 67 65 64 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66  gedModule Interf
86e0: 61 63 65 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ace..    public 
86f0: 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74  interface ISQLit
8700: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a  eManagedModule..
8710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 62      {..        b
8720: 6f 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20 67  ool Declared { g
8730: 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 73  et; }..        s
8740: 74 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74  tring Name { get
8750: 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ; }....        /
8760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
87b0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
87c0: 65 20 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20  e Create(..     
87d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
87e0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
87f0: 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  on,  /* in */.. 
8800: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
8810: 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 20  r pClientData,  
8820: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
8830: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
8840: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
8850: 73 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s,           /* 
8860: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
8870: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
8880: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
8890: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
88a0: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
88b0: 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20  ng error        
88c0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
88d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
88e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
8940: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
8950: 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
8960: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
8970: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion connection,
8980: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
8990: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
89a0: 43 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  ClientData,     
89b0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
89d0: 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 20  ng[] arguments, 
89e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
89f0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
8a00: 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
8a10: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
8a20: 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
8a30: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
8a40: 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20  error           
8a50: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
8a60: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
8a70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
8ad0: 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49  eErrorCode BestI
8ae0: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
8af0: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
8b00: 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20  Table table, /* 
8b10: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
8b20: 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
8b30: 6e 64 65 78 20 20 20 20 20 20 20 20 20 2f 2a 20  ndex         /* 
8b40: 69 6e 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20  in, out */..    
8b50: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
8b60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8bb0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
8bc0: 72 72 6f 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e  rrorCode Disconn
8bd0: 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
8be0: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
8bf0: 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
8c00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
8c10: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8c70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8c80: 65 20 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20  e Destroy(..    
8c90: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
8ca0: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
8cb0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
8cc0: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
8cd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8d20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8d30: 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20  rorCode Open(.. 
8d40: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8d50: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
8d60: 62 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ble,           /
8d70: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
8d80: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
8d90: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
8da0: 72 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20  r cursor /* out 
8db0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
8dc0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8e20: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8e30: 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20   Close(..       
8e40: 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
8e50: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
8e60: 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  rsor /* in */.. 
8e70: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
8e80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8ee0: 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 74  teErrorCode Filt
8ef0: 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
8f00: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
8f10: 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
8f20: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
8f30: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
8f40: 78 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20 20  xNumber,        
8f50: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
8f60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
8f70: 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e  tring indexStrin
8f80: 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g,              
8f90: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
8fa0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
8fb0: 65 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20 20  e[] values      
8fc0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
8fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
8fe0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9030: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
9040: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4e 65  LiteErrorCode Ne
9050: 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
9060: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
9070: 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
9080: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
9090: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
90a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
90f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 45 6f 66          bool Eof
9100: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
9110: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
9120: 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f  eCursor cursor /
9130: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
9140: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
9150: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
91a0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
91b0: 72 43 6f 64 65 20 43 6f 6c 75 6d 6e 28 0d 0a 20  rCode Column(.. 
91c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
91d0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
91e0: 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69  sor cursor, /* i
91f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
9200: 20 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20    SQLiteContext 
9210: 63 6f 6e 74 65 78 74 2c 20 20 20 20 20 20 20 20  context,        
9220: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
9230: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
9240: 65 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ex              
9250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
9260: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9270: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
9280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
92d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
92e0: 20 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20   RowId(..       
92f0: 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
9300: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
9310: 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  rsor, /* in */..
9320: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
9330: 6c 6f 6e 67 20 72 6f 77 49 64 20 20 20 20 20 20  long rowId      
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9350: 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
9360: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
9370: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
93c0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
93d0: 43 6f 64 65 20 55 70 64 61 74 65 28 0d 0a 20 20  Code Update(..  
93e0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
93f0: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9400: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
9410: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9420: 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 2c 20  Value[] values, 
9430: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
9440: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f            ref lo
9450: 6e 67 20 72 6f 77 49 64 20 20 20 20 20 20 20 20  ng rowId        
9460: 20 20 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a      /* in, out *
9470: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
9480: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
9490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
94e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
94f0: 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20  Begin(..        
9500: 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
9510: 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20  lTable table /* 
9520: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
9530: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
9540: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9580: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9590: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
95a0: 6f 64 65 20 53 79 6e 63 28 0d 0a 20 20 20 20 20  ode Sync(..     
95b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
95c0: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
95d0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
95e0: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
95f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9640: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
9650: 6f 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28 0d 0a  orCode Commit(..
9660: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
9670: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
9680: 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  able /* in */.. 
9690: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
96a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
9700: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c  teErrorCode Roll
9710: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
9720: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
9730: 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
9740: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
9750: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
97b0: 20 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63     bool FindFunc
97c0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
97d0: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
97e0: 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20  Table table,    
97f0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
9800: 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
9810: 6e 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20  ntCount,        
9820: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
9830: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9840: 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20  name,           
9850: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
9860: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
9870: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
9880: 75 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20  unction, /* out 
9890: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
98a0: 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
98b0: 6e 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20  ntData       /* 
98c0: 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
98d0: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
98e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
98f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9930: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
9940: 43 6f 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20  Code Rename(..  
9950: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9960: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9970: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
9980: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9990: 20 6e 65 77 4e 61 6d 65 20 20 20 20 20 20 20 20   newName        
99a0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
99b0: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
99c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9a10: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
9a20: 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65 70  eErrorCode Savep
9a30: 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  oint(..         
9a40: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
9a50: 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20  Table table, /* 
9a60: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
9a70: 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74     int savepoint
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a90: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
9aa0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
9ab0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9b00: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9b10: 6f 64 65 20 52 65 6c 65 61 73 65 28 0d 0a 20 20  ode Release(..  
9b20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9b30: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9b40: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
9b50: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61            int sa
9b60: 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20  vepoint         
9b70: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
9b80: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
9b90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9be0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
9bf0: 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62  eErrorCode Rollb
9c00: 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20  ackTo(..        
9c10: 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
9c20: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
9c30: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
9c40: 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
9c50: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t             /*
9c60: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
9c70: 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20      );..    }.. 
9c80: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
9c90: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ce0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
9cf0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53 74 61  SQLiteMemory Sta
9d00: 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69  tic Class..    i
9d10: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
9d20: 6c 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72  lass SQLiteMemor
9d30: 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  y..    {..      
9d40: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
9d50: 65 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41 43  e Data..#if TRAC
9d60: 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a  K_MEMORY_BYTES..
9d70: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9d80: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
9d90: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
9da0: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ect();....      
9db0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9e00: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
9e10: 74 69 63 20 69 6e 74 20 62 79 74 65 73 41 6c 6c  tic int bytesAll
9e20: 6f 63 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  ocated;..       
9e30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
9e40: 69 6e 74 20 6d 61 78 69 6d 75 6d 42 79 74 65 73  int maximumBytes
9e50: 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64  Allocated;..#end
9e60: 69 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  if..        #end
9e70: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9e80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9ed0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d       #region Mem
9ee0: 6f 72 79 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48  ory Allocation H
9ef0: 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
9f00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
9f10: 61 74 69 63 20 49 6e 74 50 74 72 20 41 6c 6c 6f  atic IntPtr Allo
9f20: 63 61 74 65 28 69 6e 74 20 73 69 7a 65 29 0d 0a  cate(int size)..
9f30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9f40: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4d         IntPtr pM
9f50: 65 6d 6f 72 79 20 3d 20 55 6e 73 61 66 65 4e 61  emory = UnsafeNa
9f60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9f70: 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a 65 29  te3_malloc(size)
9f80: 3b 0d 0a 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d  ;....#if TRACK_M
9f90: 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20  EMORY_BYTES..   
9fa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4d 65           if (pMe
9fb0: 6d 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a  mory != IntPtr.Z
9fc0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
9fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9fe0: 20 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69       int blockSi
9ff0: 7a 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72  ze = Size(pMemor
a000: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
a010: 20 20 20 20 20 20 20 69 66 20 28 62 6c 6f 63 6b         if (block
a020: 53 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20 20  Size > 0)..     
a030: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a050: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
a060: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64    bytesAllocated
a0a0: 20 2b 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a   += blockSize;..
a0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
a0d0: 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 3e 20 6d  tesAllocated > m
a0e0: 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63  aximumBytesAlloc
a0f0: 61 74 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  ated)..         
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a110: 20 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41     maximumBytesA
a120: 6c 6c 6f 63 61 74 65 64 20 3d 20 62 79 74 65 73  llocated = bytes
a130: 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20 20 20 20  Allocated;..    
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a150: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
a160: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a170: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
a180: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a190: 6e 20 70 4d 65 6d 6f 72 79 3b 0d 0a 20 20 20 20  n pMemory;..    
a1a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a1b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a200: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a210: 63 20 69 6e 74 20 53 69 7a 65 28 49 6e 74 50 74  c int Size(IntPt
a220: 72 20 70 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20  r pMemory)..    
a230: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
a240: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
a250: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a260: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a270: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  ods.sqlite3_mall
a280: 6f 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28  oc_size_interop(
a290: 70 4d 65 6d 6f 72 79 29 3b 0d 0a 23 65 6c 73 65  pMemory);..#else
a2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a2b0: 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
a2c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
a2d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a320: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a330: 73 74 61 74 69 63 20 76 6f 69 64 20 46 72 65 65  static void Free
a340: 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 29  (IntPtr pMemory)
a350: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
a360: 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59   TRACK_MEMORY_BY
a370: 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  TES..           
a380: 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20   if (pMemory != 
a390: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
a3a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
a3c0: 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a   blockSize = Siz
a3d0: 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20  e(pMemory);.... 
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a3f0: 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30  f (blockSize > 0
a400: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a420: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
a430: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
a450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a460: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41            bytesA
a470: 6c 6c 6f 63 61 74 65 64 20 2d 3d 20 62 6c 6f 63  llocated -= bloc
a480: 6b 53 69 7a 65 3b 0d 0a 20 20 20 20 20 20 20 20  kSize;..        
a490: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
a4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a4c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
a4d0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a4e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a4f0: 65 33 5f 66 72 65 65 28 70 4d 65 6d 6f 72 79 29  e3_free(pMemory)
a500: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a510: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a520: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
a530: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a590: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
a5a0: 53 74 72 69 6e 67 20 53 74 61 74 69 63 20 43 6c  String Static Cl
a5b0: 61 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ass..    interna
a5c0: 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
a5d0: 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20  QLiteString..   
a5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
a5f0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
a600: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70  tants..        p
a610: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
a620: 74 20 54 68 69 72 74 79 42 69 74 73 20 3d 20 30  t ThirtyBits = 0
a630: 78 33 66 66 66 66 66 66 66 3b 0d 0a 20 20 20 20  x3fffffff;..    
a640: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
a650: 69 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63 6f  ic readonly Enco
a660: 64 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69 6e  ding Utf8Encodin
a670: 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54 46  g = Encoding.UTF
a680: 38 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  8;..        #end
a690: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a6a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a6f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46       #region UTF
a700: 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c 70  -8 Encoding Help
a710: 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
a720: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a730: 63 20 62 79 74 65 5b 5d 20 47 65 74 55 74 66 38  c byte[] GetUtf8
a740: 42 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28  BytesFromString(
a750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a760: 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20  ring value..    
a770: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a790: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
a7a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a7b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
a7c0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
a7d0: 20 20 72 65 74 75 72 6e 20 55 74 66 38 45 6e 63    return Utf8Enc
a7e0: 6f 64 69 6e 67 2e 47 65 74 42 79 74 65 73 28 76  oding.GetBytes(v
a7f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
a800: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a860: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
a870: 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 46 72  ring GetStringFr
a880: 6f 6d 55 74 66 38 42 79 74 65 73 28 0d 0a 20 20  omUtf8Bytes(..  
a890: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
a8a0: 20 62 79 74 65 73 0d 0a 20 20 20 20 20 20 20 20   bytes..        
a8b0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
a8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a8d0: 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
a8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8f0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a900: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
a910: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
a920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a930: 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
a940: 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
a950: 73 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  s);..#else..    
a960: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
a970: 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53  tf8Encoding.GetS
a980: 74 72 69 6e 67 28 62 79 74 65 73 2c 20 30 2c 20  tring(bytes, 0, 
a990: 62 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  bytes.Length);..
a9a0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
a9b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
a9c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
a9d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aa20: 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d      #region UTF-
aa30: 38 20 53 74 72 69 6e 67 20 48 65 6c 70 65 72 20  8 String Helper 
aa40: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
aa50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
aa60: 6e 74 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42  nt ProbeForUtf8B
aa70: 79 74 65 4c 65 6e 67 74 68 28 0d 0a 20 20 20 20  yteLength(..    
aa80: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
aa90: 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
aaa0: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 0d 0a 20      int limit.. 
aab0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
aac0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aad0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
aae0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
aaf0: 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20 21      if (pValue !
ab00: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
ab30: 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
ab40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ab50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
ab60: 72 73 68 61 6c 2e 52 65 61 64 42 79 74 65 28 70  rshal.ReadByte(p
ab70: 56 61 6c 75 65 2c 20 6c 65 6e 67 74 68 29 20 3d  Value, length) =
ab80: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
aba0: 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  eak;....        
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
abc0: 6c 65 6e 67 74 68 20 3e 3d 20 6c 69 6d 69 74 29  length >= limit)
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abe0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
abf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ac00: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 2b 2b          length++
ac10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ac20: 20 20 20 7d 20 77 68 69 6c 65 20 28 74 72 75 65     } while (true
ac30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ac40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ac50: 20 72 65 74 75 72 6e 20 6c 65 6e 67 74 68 3b 0d   return length;.
ac60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
ac70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
acc0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
acd0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 74  static string St
ace0: 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
acf0: 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
ad00: 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 0d 0a   IntPtr pValue..
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
ad20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ad30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
ad40: 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
ad50: 72 28 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20  r(pValue,..     
ad60: 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 62 65             Probe
ad70: 46 6f 72 55 74 66 38 42 79 74 65 4c 65 6e 67 74  ForUtf8ByteLengt
ad80: 68 28 70 56 61 6c 75 65 2c 20 54 68 69 72 74 79  h(pValue, Thirty
ad90: 42 69 74 73 29 29 3b 0d 0a 20 20 20 20 20 20 20  Bits));..       
ada0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ae00: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
ae10: 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d  tring StringFrom
ae20: 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20  Utf8IntPtr(..   
ae30: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
ae40: 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  pValue,..       
ae50: 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d       int length.
ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
ae70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ae80: 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
ae90: 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
aea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
aeb0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
aec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
aed0: 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  f (length > 0)..
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
af00: 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65  yte[] bytes = ne
af10: 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d  w byte[length];.
af20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
af30: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
af40: 70 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 30  pValue, bytes, 0
af50: 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20  , length);....  
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
af70: 74 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46 72  turn GetStringFr
af80: 6f 6d 55 74 66 38 42 79 74 65 73 28 62 79 74 65  omUtf8Bytes(byte
af90: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
afa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
afb0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
afc0: 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  Empty;..        
afd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b020: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b030: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
b040: 74 50 74 72 20 55 74 66 38 49 6e 74 50 74 72 46  tPtr Utf8IntPtrF
b050: 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  romString(..    
b060: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
b070: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
b080: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
b090: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b0a0: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0c0: 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65  return IntPtr.Ze
b0d0: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
b0e0: 20 20 20 49 6e 74 50 74 72 20 72 65 73 75 6c 74     IntPtr result
b0f0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
b100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
b110: 65 5b 5d 20 62 79 74 65 73 20 3d 20 47 65 74 55  e[] bytes = GetU
b120: 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69  tf8BytesFromStri
b130: 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  ng(value);....  
b140: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
b150: 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tes == null)..  
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b170: 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
b180: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b190: 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 62 79   int length = by
b1a0: 74 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  tes.Length;.... 
b1b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
b1c0: 74 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  t = SQLiteMemory
b1d0: 2e 41 6c 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68  .Allocate(length
b1e0: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
b1f0: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
b200: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
b210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b220: 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
b230: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
b240: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
b250: 79 28 62 79 74 65 73 2c 20 30 2c 20 72 65 73 75  y(bytes, 0, resu
b260: 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20  lt, length);..  
b270: 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
b280: 6c 2e 57 72 69 74 65 42 79 74 65 28 72 65 73 75  l.WriteByte(resu
b290: 6c 74 2c 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0d  lt, length, 0);.
b2a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
b2b0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
b2c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b2d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b2e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b330: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
b340: 6f 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20  on UTF-8 String 
b350: 41 72 72 61 79 20 48 65 6c 70 65 72 20 4d 65 74  Array Helper Met
b360: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75  hods..        pu
b370: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
b380: 6e 67 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79  ng[] StringArray
b390: 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 41 72  FromUtf8IntPtrAr
b3a0: 72 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ray(..          
b3b0: 20 20 49 6e 74 50 74 72 5b 5d 20 70 56 61 6c 75    IntPtr[] pValu
b3c0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
b3d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b3e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
b3f0: 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  alues == null)..
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
b420: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b430: 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65  ng[] result = ne
b440: 77 20 73 74 72 69 6e 67 5b 70 56 61 6c 75 65 73  w string[pValues
b450: 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  .Length];....   
b460: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
b470: 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
b480: 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67  ex < result.Leng
b490: 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b4b0: 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 53 74  sult[index] = St
b4c0: 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
b4d0: 74 72 28 70 56 61 6c 75 65 73 5b 69 6e 64 65 78  tr(pValues[index
b4e0: 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]);....         
b4f0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
b500: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
b510: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b560: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
b570: 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 5b  c static IntPtr[
b580: 5d 20 55 74 66 38 49 6e 74 50 74 72 41 72 72 61  ] Utf8IntPtrArra
b590: 79 46 72 6f 6d 53 74 72 69 6e 67 41 72 72 61 79  yFromStringArray
b5a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
b5b0: 74 72 69 6e 67 5b 5d 20 76 61 6c 75 65 73 0d 0a  tring[] values..
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b5d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b5e0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73        if (values
b5f0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
b600: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b610: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
b620: 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20         IntPtr[] 
b630: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 49 6e 74  result = new Int
b640: 50 74 72 5b 76 61 6c 75 65 73 2e 4c 65 6e 67 74  Ptr[values.Lengt
b650: 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h];....         
b660: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
b670: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 72  x = 0; index < r
b680: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 20 69 6e  esult.Length; in
b690: 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
b6a0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69          result[i
b6b0: 6e 64 65 78 5d 20 3d 20 55 74 66 38 49 6e 74 50  ndex] = Utf8IntP
b6c0: 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c  trFromString(val
b6d0: 75 65 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a  ues[index]);....
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b6f0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
b700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
b710: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
b720: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
b730: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b780: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
b790: 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c  on SQLiteMarshal
b7a0: 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20   Static Class.. 
b7b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
b7c0: 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ic class SQLiteM
b7d0: 61 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d 0a 20  arshal..    {.. 
b7e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b7f0: 6e 74 50 74 72 20 48 65 6c 70 65 72 20 4d 65 74  ntPtr Helper Met
b800: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75  hods..        pu
b810: 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
b820: 74 72 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  tr IntPtrForOffs
b830: 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et(..           
b840: 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
b850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
b860: 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  t offset..      
b870: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b890: 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 50 74  return new IntPt
b8a0: 72 28 70 6f 69 6e 74 65 72 2e 54 6f 49 6e 74 36  r(pointer.ToInt6
b8b0: 34 28 29 20 2b 20 6f 66 66 73 65 74 29 3b 0d 0a  4() + offset);..
b8c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b8d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b8e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
b940: 69 6f 6e 20 4d 61 72 73 68 61 6c 20 52 65 61 64  ion Marshal Read
b950: 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
b960: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
b970: 73 74 61 74 69 63 20 69 6e 74 20 52 65 61 64 49  static int ReadI
b980: 6e 74 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20  nt32(..         
b990: 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
b9a0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
b9b0: 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20  int offset..    
b9c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b9d0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
b9e0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
b9f0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
ba00: 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
ba10: 2e 52 65 61 64 49 6e 74 33 32 28 70 6f 69 6e 74  .ReadInt32(point
ba20: 65 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65  er, offset);..#e
ba30: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
ba40: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
ba50: 52 65 61 64 49 6e 74 33 32 28 49 6e 74 50 74 72  ReadInt32(IntPtr
ba60: 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65  ForOffset(pointe
ba70: 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65  r, offset));..#e
ba80: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
ba90: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bae0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
baf0: 62 6c 69 63 20 73 74 61 74 69 63 20 64 6f 75 62  blic static doub
bb00: 6c 65 20 52 65 61 64 44 6f 75 62 6c 65 28 0d 0a  le ReadDouble(..
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
bb20: 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20  tr pointer,..   
bb30: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
bb40: 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  set..           
bb50: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
bb60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
bb70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
bb80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
bb90: 6e 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 49  n BitConverter.I
bba0: 6e 74 36 34 42 69 74 73 54 6f 44 6f 75 62 6c 65  nt64BitsToDouble
bbb0: 28 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  (Marshal.ReadInt
bbc0: 36 34 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64(..           
bbd0: 20 20 20 20 20 70 6f 69 6e 74 65 72 2c 20 6f 66       pointer, of
bbe0: 66 73 65 74 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  fset));..#else..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bc00: 72 6e 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e  rn BitConverter.
bc10: 54 6f 44 6f 75 62 6c 65 28 42 69 74 43 6f 6e 76  ToDouble(BitConv
bc20: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 0d  erter.GetBytes(.
bc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc40: 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74   Marshal.ReadInt
bc50: 36 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  64(IntPtrForOffs
bc60: 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  et(pointer, offs
bc70: 65 74 29 29 29 2c 20 30 29 3b 0d 0a 23 65 6e 64  et))), 0);..#end
bc80: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
bc90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
bcf0: 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72  ic static IntPtr
bd00: 20 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20 20   ReadIntPtr(..  
bd10: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
bd20: 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
bd30: 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
bd40: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
bd50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
bd60: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
bd70: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
bd80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bd90: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50  Marshal.ReadIntP
bda0: 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  tr(pointer, offs
bdb0: 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  et);..#else..   
bdc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bdd0: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50  Marshal.ReadIntP
bde0: 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  tr(IntPtrForOffs
bdf0: 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  et(pointer, offs
be00: 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  et));..#endif.. 
be10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
be20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
be30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
be80: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
be90: 6f 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74 65  on Marshal Write
bea0: 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
beb0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
bec0: 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74  static void Writ
bed0: 65 49 6e 74 33 32 28 0d 0a 20 20 20 20 20 20 20  eInt32(..       
bee0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
bef0: 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
bf00: 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20    int offset,.. 
bf10: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
bf20: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
bf30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
bf40: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
bf50: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
bf70: 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70  hal.WriteInt32(p
bf80: 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 2c 20  ointer, offset, 
bf90: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
bfb0: 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 49  hal.WriteInt32(I
bfc0: 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
bfd0: 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c  ointer, offset),
bfe0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
bff0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
c000: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
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 0d 0a  //////////////..
c050: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
c060: 20 73 74 61 74 69 63 20 76 6f 69 64 20 57 72 69   static void Wri
c070: 74 65 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20  teDouble(..     
c080: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f         IntPtr po
c090: 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  inter,..        
c0a0: 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d      int offset,.
c0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75  .            dou
c0c0: 62 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ble value..     
c0d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
c0e0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
c0f0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c100: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
c110: 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
c120: 74 36 34 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  t64(pointer, off
c130: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  set,..          
c140: 20 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74        BitConvert
c150: 65 72 2e 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34  er.DoubleToInt64
c160: 42 69 74 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23  Bits(value));..#
c170: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
c180: 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49    Marshal.WriteI
c190: 6e 74 36 34 28 49 6e 74 50 74 72 46 6f 72 4f 66  nt64(IntPtrForOf
c1a0: 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66  fset(pointer, of
c1b0: 66 73 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  fset),..        
c1c0: 20 20 20 20 20 20 20 20 42 69 74 43 6f 6e 76 65          BitConve
c1d0: 72 74 65 72 2e 54 6f 49 6e 74 36 34 28 42 69 74  rter.ToInt64(Bit
c1e0: 43 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  Converter.GetByt
c1f0: 65 73 28 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d  es(value), 0));.
c200: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
c210: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
c220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c260: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c270: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
c280: 6f 69 64 20 57 72 69 74 65 49 6e 74 50 74 72 28  oid WriteIntPtr(
c290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
c2a0: 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
c2b0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
c2c0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
c2d0: 20 20 20 20 49 6e 74 50 74 72 20 76 61 6c 75 65      IntPtr value
c2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
c2f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
c300: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
c310: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
c320: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
c330: 57 72 69 74 65 49 6e 74 50 74 72 28 70 6f 69 6e  WriteIntPtr(poin
c340: 74 65 72 2c 20 6f 66 66 73 65 74 2c 20 76 61 6c  ter, offset, val
c350: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
c360: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
c370: 2e 57 72 69 74 65 49 6e 74 50 74 72 28 49 6e 74  .WriteIntPtr(Int
c380: 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69  PtrForOffset(poi
c390: 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 20 76  nter, offset), v
c3a0: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
c3b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c3c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c3d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c420: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
c430: 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20 48  ion Byte Array H
c440: 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
c450: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c460: 61 74 69 63 20 62 79 74 65 5b 5d 20 42 79 74 65  atic byte[] Byte
c470: 73 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20  sFromIntPtr(..  
c480: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
c490: 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20   pValue,..      
c4a0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
c4c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c4d0: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
c4e0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
c4f0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
c500: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c520: 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29  if (length == 0)
c530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c540: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74    return new byt
c550: 65 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e[0];....       
c560: 20 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75       byte[] resu
c570: 6c 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65  lt = new byte[le
c580: 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth];....      
c590: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
c5a0: 70 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c  py(pValue, resul
c5b0: 74 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  t, 0, length);..
c5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
c5d0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
c5e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c5f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c640: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c650: 74 69 63 20 49 6e 74 50 74 72 20 42 79 74 65 73  tic IntPtr Bytes
c660: 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  ToIntPtr(..     
c670: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 76 61         byte[] va
c680: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
c690: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
c6a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
c6b0: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c6d0: 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
c6e0: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
c6f0: 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 76    int length = v
c700: 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  alue.Length;....
c710: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c720: 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20  length == 0)..  
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c740: 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f  turn IntPtr.Zero
c750: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c760: 20 49 6e 74 50 74 72 20 72 65 73 75 6c 74 20 3d   IntPtr result =
c770: 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c   SQLiteMemory.Al
c780: 6c 6f 63 61 74 65 28 6c 65 6e 67 74 68 29 3b 0d  locate(length);.
c790: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
c7a0: 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74  f (result == Int
c7b0: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
c7c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c7d0: 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
c7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
c7f0: 72 73 68 61 6c 2e 43 6f 70 79 28 76 61 6c 75 65  rshal.Copy(value
c800: 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e  , 0, result, len
c810: 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
c820: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
c830: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
c840: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
c850: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
c860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c8b0: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56   #region SQLiteV
c8c0: 61 6c 75 65 20 48 65 6c 70 65 72 20 4d 65 74 68  alue Helper Meth
c8d0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
c8e0: 6c 69 63 20 73 74 61 74 69 63 20 53 51 4c 69 74  lic static SQLit
c8f0: 65 56 61 6c 75 65 5b 5d 20 56 61 6c 75 65 41 72  eValue[] ValueAr
c900: 72 61 79 46 72 6f 6d 53 69 7a 65 41 6e 64 49 6e  rayFromSizeAndIn
c910: 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
c920: 20 20 20 69 6e 74 20 6e 44 61 74 61 2c 0d 0a 20     int nData,.. 
c930: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
c940: 72 20 61 70 44 61 74 61 0d 0a 20 20 20 20 20 20  r apData..      
c950: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
c960: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c970: 69 66 20 28 6e 44 61 74 61 20 3c 20 30 29 0d 0a  if (nData < 0)..
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c9b0: 61 70 44 61 74 61 20 3d 3d 20 49 6e 74 50 74 72  apData == IntPtr
c9c0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
c9d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
c9e0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
c9f0: 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
ca00: 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  ] result = new S
ca10: 51 4c 69 74 65 56 61 6c 75 65 5b 6e 44 61 74 61  QLiteValue[nData
ca20: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
ca30: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
ca40: 20 3d 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30   = 0, offset = 0
ca50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ca60: 20 20 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72         index < r
ca70: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20  esult.Length;.. 
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca90: 20 20 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73     index++, offs
caa0: 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
cab0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
cac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cad0: 20 20 20 49 6e 74 50 74 72 20 70 44 61 74 61 20     IntPtr pData 
cae0: 3d 20 52 65 61 64 49 6e 74 50 74 72 28 61 70 44  = ReadIntPtr(apD
caf0: 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d  ata, offset);...
cb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb10: 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d   result[index] =
cb20: 20 28 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74   (pData != IntPt
cb30: 72 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20  r.Zero) ?..     
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
cb50: 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70  ew SQLiteValue(p
cb60: 44 61 74 61 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  Data) : null;.. 
cb70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
cb90: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
cba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cbb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
cbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cc00: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
cc10: 63 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20  c SQLiteValue[] 
cc20: 56 61 6c 75 65 41 72 72 61 79 46 72 6f 6d 49 6e  ValueArrayFromIn
cc30: 74 50 74 72 41 72 72 61 79 28 0d 0a 20 20 20 20  tPtrArray(..    
cc40: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d          IntPtr[]
cc50: 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   values..       
cc60: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
cc70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
cc80: 66 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c  f (values == nul
cc90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cca0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
ccb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ccc0: 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 72 65  SQLiteValue[] re
ccd0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 51 4c 69 74  sult = new SQLit
cce0: 65 56 61 6c 75 65 5b 76 61 6c 75 65 73 2e 4c 65  eValue[values.Le
ccf0: 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth];....      
cd00: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
cd10: 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
cd20: 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b  < result.Length;
cd30: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
cd40: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
cd50: 74 5b 69 6e 64 65 78 5d 20 3d 20 6e 65 77 20 53  t[index] = new S
cd60: 51 4c 69 74 65 56 61 6c 75 65 28 76 61 6c 75 65  QLiteValue(value
cd70: 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20  s[index]);....  
cd80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
cd90: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
cda0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
cdb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
cdc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ce10: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51        #region SQ
ce20: 4c 69 74 65 49 6e 64 65 78 20 48 65 6c 70 65 72  LiteIndex Helper
ce30: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
ce40: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
ce50: 76 6f 69 64 20 49 6e 64 65 78 46 72 6f 6d 49 6e  void IndexFromIn
ce60: 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
ce70: 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64 65 78     IntPtr pIndex
ce80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
ce90: 65 66 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69  ef SQLiteIndex i
cea0: 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
ceb0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ced0: 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72  pIndex == IntPtr
cee0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
cef0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
cf00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
cf10: 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a  nt offset = 0;..
cf20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
cf30: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t nConstraint = 
cf40: 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78  ReadInt32(pIndex
cf50: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
cf60: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
cf70: 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b   += sizeof(int);
cf80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cf90: 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69  IntPtr pConstrai
cfa0: 6e 74 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28  nt = ReadIntPtr(
cfb0: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
cfc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cfd0: 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
cfe0: 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Size;....      
cff0: 20 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72        int nOrder
d000: 42 79 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70  By = ReadInt32(p
d010: 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
d020: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
d030: 6e 64 65 78 20 3d 20 6e 65 77 20 53 51 4c 69 74  ndex = new SQLit
d040: 65 49 6e 64 65 78 28 6e 43 6f 6e 73 74 72 61 69  eIndex(nConstrai
d050: 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a  nt, nOrderBy);..
d060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
d070: 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
d080: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
d090: 20 20 20 20 49 6e 74 50 74 72 20 70 4f 72 64 65      IntPtr pOrde
d0a0: 72 42 79 20 3d 20 52 65 61 64 49 6e 74 50 74 72  rBy = ReadIntPtr
d0b0: 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29  (pIndex, offset)
d0c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d0d0: 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74   offset += IntPt
d0e0: 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  r.Size;....     
d0f0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
d100: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d  onstraintUsage =
d110: 20 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64   ReadIntPtr(pInd
d120: 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
d130: 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
d140: 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
d150: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
d160: 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
d170: 49 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20 52 65  IndexNumber = Re
d180: 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20  adInt32(pIndex, 
d190: 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
d1a0: 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
d1b0: 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a  = sizeof(int);..
d1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
d1d0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 49 6e 64 65  dex.Outputs.Inde
d1e0: 78 53 74 72 69 6e 67 20 3d 20 53 51 4c 69 74 65  xString = SQLite
d1f0: 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
d200: 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
d220: 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 49  tPtrForOffset(pI
d230: 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 29 3b 0d  ndex, offset));.
d240: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
d250: 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e  ffset += IntPtr.
d260: 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
d270: 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
d280: 74 73 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  ts.NeedToFreeInd
d290: 65 78 53 74 72 69 6e 67 20 3d 20 52 65 61 64 49  exString = ReadI
d2a0: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
d2b0: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
d2c0: 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
d2d0: 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20  izeof(int);.... 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
d2f0: 2e 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79  .Outputs.OrderBy
d300: 43 6f 6e 73 75 6d 65 64 20 3d 20 52 65 61 64 49  Consumed = ReadI
d310: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
d320: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
d330: 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
d340: 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20  izeof(int);.... 
d350: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
d360: 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74  .Outputs.Estimat
d370: 65 64 43 6f 73 74 20 3d 20 52 65 61 64 44 6f 75  edCost = ReadDou
d380: 62 6c 65 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  ble(pIndex, offs
d390: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
d3a0: 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f      int sizeOfCo
d3b0: 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 4d  nstraintType = M
d3c0: 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
d3d0: 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
d3e0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
d3f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d400: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
d410: 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  int));....      
d420: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
d430: 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20  Constraint = 0; 
d440: 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43  iConstraint < nC
d450: 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73  onstraint; iCons
d460: 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20  traint++)..     
d470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d480: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
d490: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d4a0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
d4b0: 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e  traint constrain
d4c0: 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
d4d0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73           new Uns
d4e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d4f0: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
d500: 6f 6e 73 74 72 61 69 6e 74 28 29 3b 0d 0a 0d 0a  onstraint();....
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
d530: 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f 72  ucture(IntPtrFor
d540: 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69  Offset(pConstrai
d550: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
d560: 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73 74 72           iConstr
d570: 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e  aint * sizeOfCon
d580: 73 74 72 61 69 6e 74 54 79 70 65 29 2c 20 63 6f  straintType), co
d590: 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d 0a 20 20  nstraint);....  
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d5b0: 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74  dex.Inputs.Const
d5c0: 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69  raints[iConstrai
d5d0: 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  nt] =..         
d5e0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
d5f0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
d600: 61 69 6e 74 28 63 6f 6e 73 74 72 61 69 6e 74 29  aint(constraint)
d610: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
d620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d630: 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64 65 72 42  int sizeOfOrderB
d640: 79 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e  yType = Marshal.
d650: 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a  SizeOf(typeof(..
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d680: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
d690: 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d 0a 0d 0a  x_orderby));....
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
d6b0: 28 69 6e 74 20 69 4f 72 64 65 72 42 79 20 3d 20  (int iOrderBy = 
d6c0: 30 3b 20 69 4f 72 64 65 72 42 79 20 3c 20 6e 4f  0; iOrderBy < nO
d6d0: 72 64 65 72 42 79 3b 20 69 4f 72 64 65 72 42 79  rderBy; iOrderBy
d6e0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
d6f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d700: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
d710: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d720: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72  index_orderby or
d730: 64 65 72 42 79 20 3d 0d 0a 20 20 20 20 20 20 20  derBy =..       
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
d750: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d760: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
d770: 65 78 5f 6f 72 64 65 72 62 79 28 29 3b 0d 0a 0d  ex_orderby();...
d780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d790: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
d7a0: 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f  ructure(IntPtrFo
d7b0: 72 4f 66 66 73 65 74 28 70 4f 72 64 65 72 42 79  rOffset(pOrderBy
d7c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d7d0: 20 20 20 20 20 20 20 69 4f 72 64 65 72 42 79 20         iOrderBy 
d7e0: 2a 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54  * sizeOfOrderByT
d7f0: 79 70 65 29 2c 20 6f 72 64 65 72 42 79 29 3b 0d  ype), orderBy);.
d800: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d810: 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e     index.Inputs.
d820: 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72 42  OrderBys[iOrderB
d830: 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  y] =..          
d840: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
d850: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
d860: 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20 20  (orderBy);..    
d870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d880: 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a           int siz
d890: 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  eOfConstraintUsa
d8a0: 67 65 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c  geType = Marshal
d8b0: 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d  .SizeOf(typeof(.
d8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d8d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d8e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
d8f0: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
d900: 61 67 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  age));....      
d910: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
d920: 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20  Constraint = 0; 
d930: 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43  iConstraint < nC
d940: 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73  onstraint; iCons
d950: 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20  traint++)..     
d960: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d970: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
d980: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d990: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
d9a0: 74 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e  traint_usage con
d9b0: 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a  straintUsage =..
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
d9e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d9f0: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
da00: 61 69 6e 74 5f 75 73 61 67 65 28 29 3b 0d 0a 0d  aint_usage();...
da10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da20: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
da30: 72 75 63 74 75 72 65 28 49 6e 74 50 74 72 46 6f  ructure(IntPtrFo
da40: 72 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61  rOffset(pConstra
da50: 69 6e 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20  intUsage,..     
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
da70: 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a  Constraint * siz
da80: 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  eOfConstraintUsa
da90: 67 65 54 79 70 65 29 2c 20 63 6f 6e 73 74 72 61  geType), constra
daa0: 69 6e 74 55 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  intUsage);....  
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
dac0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
dad0: 74 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f  traintUsages[iCo
dae0: 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20  nstraint] =..   
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db00: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
db10: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28  ConstraintUsage(
db20: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 29  constraintUsage)
db30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
db40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
db50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
db60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
dba0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
dbb0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 64   static void Ind
dbc0: 65 78 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20  exToIntPtr(..   
dbd0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49           SQLiteI
dbe0: 6e 64 65 78 20 69 6e 64 65 78 2c 0d 0a 20 20 20  ndex index,..   
dbf0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
dc00: 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20  pIndex..        
dc10: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
dc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
dc30: 20 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c 6c   ((index == null
dc40: 29 20 7c 7c 20 28 69 6e 64 65 78 2e 49 6e 70 75  ) || (index.Inpu
dc50: 74 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a  ts == null) ||..
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 28 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f  (index.Inputs.Co
dc80: 6e 73 74 72 61 69 6e 74 73 20 3d 3d 20 6e 75 6c  nstraints == nul
dc90: 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  l) ||..         
dca0: 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e         (index.In
dcb0: 70 75 74 73 2e 4f 72 64 65 72 42 79 73 20 3d 3d  puts.OrderBys ==
dcc0: 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65 78   null) || (index
dcd0: 2e 4f 75 74 70 75 74 73 20 3d 3d 20 6e 75 6c 6c  .Outputs == null
dce0: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
dcf0: 20 20 20 20 20 20 28 69 6e 64 65 78 2e 4f 75 74        (index.Out
dd00: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
dd10: 73 61 67 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d  sages == null)).
dd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20  return;..       
dd50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
dd60: 20 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78        if (pIndex
dd70: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
dd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dd90: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
dda0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
ddb0: 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
ddc0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
ddd0: 73 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49 6e  straint = ReadIn
dde0: 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  t32(pIndex, offs
ddf0: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
de00: 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72 61      if (nConstra
de10: 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 49 6e 70  int != index.Inp
de20: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
de30: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  Length)..       
de40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
de50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
de60: 69 66 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74 20  if (nConstraint 
de70: 21 3d 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73  != index.Outputs
de80: 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
de90: 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20  s.Length)..     
dea0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
deb0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
dec0: 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65    offset += size
ded0: 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  of(int);....    
dee0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
def0: 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52 65 61  Constraint = Rea
df00: 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20  dIntPtr(pIndex, 
df10: 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
df20: 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
df30: 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a  = IntPtr.Size;..
df40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
df50: 74 20 6e 4f 72 64 65 72 42 79 20 3d 20 52 65 61  t nOrderBy = Rea
df60: 64 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f  dInt32(pIndex, o
df70: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
df80: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
df90: 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d   sizeof(int);...
dfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
dfb0: 50 74 72 20 70 4f 72 64 65 72 42 79 20 3d 20 52  Ptr pOrderBy = R
dfc0: 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78  eadIntPtr(pIndex
dfd0: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
dfe0: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
dff0: 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b   += IntPtr.Size;
e000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e010: 49 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69  IntPtr pConstrai
e020: 6e 74 55 73 61 67 65 20 3d 20 52 65 61 64 49 6e  ntUsage = ReadIn
e030: 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66  tPtr(pIndex, off
e040: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
e050: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43       int sizeOfC
e060: 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20  onstraintType = 
e070: 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74  Marshal.SizeOf(t
e080: 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
e090: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
e0a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e0b0: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
e0c0: 61 69 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  aint));....     
e0d0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
e0e0: 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b  iConstraint = 0;
e0f0: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e   iConstraint < n
e100: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e  Constraint; iCon
e110: 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20  straint++)..    
e120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e130: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
e140: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e150: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
e160: 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
e170: 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
e180: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
e190: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e1a0: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
e1b0: 63 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20 20 20  constraint(..   
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1d0: 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
e1e0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43  s.Constraints[iC
e1f0: 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a  onstraint]);....
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 4d 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72  Marshal.Structur
e220: 65 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20  eToPtr(..       
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
e240: 73 74 72 61 69 6e 74 2c 20 49 6e 74 50 74 72 46  straint, IntPtrF
e250: 6f 72 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72  orOffset(pConstr
e260: 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  aint,..         
e270: 20 20 20 20 20 20 20 20 20 20 20 69 43 6f 6e 73             iCons
e280: 74 72 61 69 6e 74 20 2a 20 73 69 7a 65 4f 66 43  traint * sizeOfC
e290: 6f 6e 73 74 72 61 69 6e 74 54 79 70 65 29 2c 20  onstraintType), 
e2a0: 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  false);....     
e2b0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
e2c0: 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  .Inputs.Constrai
e2d0: 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d  nts[iConstraint]
e2e0: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
e2f0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
e300: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
e310: 74 28 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a  t(constraint);..
e320: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
e340: 20 73 69 7a 65 4f 66 4f 72 64 65 72 42 79 54 79   sizeOfOrderByTy
e350: 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a  pe = Marshal.Siz
e360: 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20  eOf(typeof(..   
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
e380: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e390: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f  .sqlite3_index_o
e3a0: 72 64 65 72 62 79 29 29 3b 0d 0a 0d 0a 20 20 20  rderby));....   
e3b0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
e3c0: 74 20 69 4f 72 64 65 72 42 79 20 3d 20 30 3b 20  t iOrderBy = 0; 
e3d0: 69 4f 72 64 65 72 42 79 20 3c 20 6e 4f 72 64 65  iOrderBy < nOrde
e3e0: 72 42 79 3b 20 69 4f 72 64 65 72 42 79 2b 2b 29  rBy; iOrderBy++)
e3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e420: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
e430: 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64 65 72  ex_orderby order
e440: 42 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  By =..          
e450: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
e460: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e470: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
e480: 6f 72 64 65 72 62 79 28 0d 0a 20 20 20 20 20 20  orderby(..      
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4a0: 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f    index.Inputs.O
e4b0: 72 64 65 72 42 79 73 5b 69 4f 72 64 65 72 42 79  rderBys[iOrderBy
e4c0: 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]);....         
e4d0: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53         Marshal.S
e4e0: 74 72 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a  tructureToPtr(..
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e500: 20 20 20 20 6f 72 64 65 72 42 79 2c 20 49 6e 74      orderBy, Int
e510: 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 4f 72  PtrForOffset(pOr
e520: 64 65 72 42 79 2c 0d 0a 20 20 20 20 20 20 20 20  derBy,..        
e530: 20 20 20 20 20 20 20 20 20 20 20 20 69 4f 72 64              iOrd
e540: 65 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f 72 64  erBy * sizeOfOrd
e550: 65 72 42 79 54 79 70 65 29 2c 20 66 61 6c 73 65  erByType), false
e560: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e570: 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75        index.Inpu
e580: 74 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64  ts.OrderBys[iOrd
e590: 65 72 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20  erBy] =..       
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
e5b0: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
e5c0: 72 42 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20  rBy(orderBy);.. 
e5d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
e5f0: 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
e600: 55 73 61 67 65 54 79 70 65 20 3d 20 4d 61 72 73  UsageType = Mars
e610: 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f  hal.SizeOf(typeo
e620: 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
e630: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
e640: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e650: 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
e660: 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a 20 20 20  _usage));....   
e670: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
e680: 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t iConstraint = 
e690: 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c  0; iConstraint <
e6a0: 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 43   nConstraint; iC
e6b0: 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d 0a 20 20  onstraint++)..  
e6c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
e6e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e6f0: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
e700: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
e710: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  constraintUsage 
e720: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
e730: 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61 66         new Unsaf
e740: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e750: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
e760: 73 74 72 61 69 6e 74 5f 75 73 61 67 65 28 0d 0a  straint_usage(..
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e780: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
e790: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
e7a0: 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61 69  Usages[iConstrai
e7b0: 6e 74 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt]);....       
e7c0: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
e7d0: 2e 53 74 72 75 63 74 75 72 65 54 6f 50 74 72 28  .StructureToPtr(
e7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e7f0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
e800: 55 73 61 67 65 2c 20 49 6e 74 50 74 72 46 6f 72  Usage, IntPtrFor
e810: 4f 66 66 73 65 74 28 70 43 6f 6e 73 74 72 61 69  Offset(pConstrai
e820: 6e 74 55 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  ntUsage,..      
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43                iC
e840: 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a 65  onstraint * size
e850: 4f 66 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  OfConstraintUsag
e860: 65 54 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d  eType), false);.
e870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e880: 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
e890: 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  .ConstraintUsage
e8a0: 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d  s[iConstraint] =
e8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8c0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
e8d0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
e8e0: 73 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55  sage(constraintU
e8f0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
e900: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
e910: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
e920: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
e930: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e940: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e990: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
e9a0: 4c 69 74 65 4d 6f 64 75 6c 65 20 42 61 73 65 20  LiteModule Base 
e9b0: 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2a 20 4e 4f  Class..    /* NO
e9c0: 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20  T SEALED */..   
e9d0: 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74   public abstract
e9e0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64   class SQLiteMod
e9f0: 75 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  ule :..         
ea00: 20 20 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65     ISQLiteManage
ea10: 64 4d 6f 64 75 6c 65 2c 20 2f 2a 49 53 51 4c 69  dModule, /*ISQLi
ea20: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 2a  teNativeModule,*
ea30: 2f 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  / IDisposable.. 
ea40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
ea50: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
ea60: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
ea70: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 64   private const d
ea80: 6f 75 62 6c 65 20 44 65 66 61 75 6c 74 43 6f 73  ouble DefaultCos
ea90: 74 20 3d 20 64 6f 75 62 6c 65 2e 4d 61 78 56 61  t = double.MaxVa
eaa0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  lue;..        #e
eab0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
eac0: 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
eb10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
eb20: 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20  rivate Data..   
eb30: 20 20 20 20 20 70 72 69 76 61 74 65 20 55 6e 73       private Uns
eb40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
eb50: 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  .sqlite3_module 
eb60: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20  nativeModule;.. 
eb70: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44         private D
eb80: 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72  ictionary<IntPtr
eb90: 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  , SQLiteVirtualT
eba0: 61 62 6c 65 3e 20 74 61 62 6c 65 73 3b 0d 0a 20  able> tables;.. 
ebb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44         private D
ebc0: 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72  ictionary<IntPtr
ebd0: 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  , SQLiteVirtualT
ebe0: 61 62 6c 65 43 75 72 73 6f 72 3e 20 63 75 72 73  ableCursor> curs
ebf0: 6f 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  ors;..        #e
ec00: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
ec10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ec20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ec60: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
ec70: 6e 74 65 72 6e 61 6c 20 4d 65 74 68 6f 64 73 0d  nternal Methods.
ec80: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
ec90: 6c 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  l UnsafeNativeMe
eca0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
ecb0: 64 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76  dule CreateNativ
ecc0: 65 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20  eModule()..     
ecd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ece0: 20 20 72 65 74 75 72 6e 20 43 72 65 61 74 65 4e    return CreateN
ecf0: 61 74 69 76 65 4d 6f 64 75 6c 65 28 43 72 65 61  ativeModule(Crea
ed00: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6d  teNativeModuleIm
ed10: 70 6c 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  pl());..        
ed20: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
ed30: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ed40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ed50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ed90: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
eda0: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
edb0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
edc0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 28 73 74 72  SQLiteModule(str
edd0: 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ing name)..     
ede0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
edf0: 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75    if (name == nu
ee00: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ee10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
ee20: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
ee30: 74 69 6f 6e 28 22 6e 61 6d 65 22 29 3b 0d 0a 0d  tion("name");...
ee40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
ee50: 73 2e 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d 0a  s.name = name;..
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
ee70: 2e 74 61 62 6c 65 73 20 3d 20 6e 65 77 20 44 69  .tables = new Di
ee80: 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
ee90: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
eea0: 62 6c 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  ble>();..       
eeb0: 20 20 20 20 20 74 68 69 73 2e 63 75 72 73 6f 72       this.cursor
eec0: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
eed0: 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74  ry<IntPtr, SQLit
eee0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
eef0: 73 6f 72 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20  sor>();..       
ef00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ef10: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
ef20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ef70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
ef80: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
ef90: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55 6e        private Un
efa0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
efb0: 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
efc0: 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64   CreateNativeMod
efd0: 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ule(..          
efe0: 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d    ISQLiteNativeM
eff0: 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  odule module..  
f000: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
f010: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f020: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
f030: 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
f040: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f050: 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a 20 20  e3_module();..  
f060: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
f070: 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20  Module.iVersion 
f080: 3d 20 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 2;....        
f090: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21      if (module !
f0a0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f0b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f0c0: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
f0d0: 64 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e  dule.xCreate = n
f0e0: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
f0f0: 65 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d  ethods.xCreate(.
f100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f110: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 72 65       module.xCre
f120: 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ate);....       
f130: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
f140: 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d  odule.xConnect =
f150: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
f160: 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63  eMethods.xConnec
f170: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
f180: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
f190: 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20  Connect);....   
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
f1b0: 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
f1c0: 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66  ndex = new Unsaf
f1d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
f1e0: 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20  BestIndex(..    
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 6d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  module.xBestInde
f210: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x);....         
f220: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
f230: 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20  ule.xDisconnect 
f240: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
f250: 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f  veMethods.xDisco
f260: 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
f270: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
f280: 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b  le.xDisconnect);
f290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f2a0: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
f2b0: 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20  .xDestroy = new 
f2c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f2d0: 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20  ods.xDestroy(.. 
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2f0: 20 20 20 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72     module.xDestr
f300: 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  oy);....        
f310: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
f320: 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e 65 77  dule.xOpen = new
f330: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f340: 68 6f 64 73 2e 78 4f 70 65 6e 28 0d 0a 20 20 20  hods.xOpen(..   
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 29 3b 0d   module.xOpen);.
f370: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f380: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
f390: 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73  xClose = new Uns
f3a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f3b0: 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20  .xClose(..      
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
f3d0: 64 75 6c 65 2e 78 43 6c 6f 73 65 29 3b 0d 0a 0d  dule.xClose);...
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3f0: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
f400: 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61  ilter = new Unsa
f410: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f420: 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20  xFilter(..      
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
f440: 64 75 6c 65 2e 78 46 69 6c 74 65 72 29 3b 0d 0a  dule.xFilter);..
f450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f460: 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
f470: 4e 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  Next = new Unsaf
f480: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
f490: 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
f4a0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f4b0: 65 2e 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  e.xNext);....   
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
f4d0: 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d  iveModule.xEof =
f4e0: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
f4f0: 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 6d 6f  eMethods.xEof(mo
f500: 64 75 6c 65 2e 78 45 6f 66 29 3b 0d 0a 0d 0a 20  dule.xEof);.... 
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
f520: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
f530: 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  umn = new Unsafe
f540: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
f550: 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20  olumn(..        
f560: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
f570: 6c 65 2e 78 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a  le.xColumn);....
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f590: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
f5a0: 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  wId = new Unsafe
f5b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
f5c0: 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20  owId(..         
f5d0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f5e0: 65 2e 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20  e.xRowId);....  
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
f600: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
f610: 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
f620: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70  ativeMethods.xUp
f630: 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  date(..         
f640: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f650: 65 2e 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20  e.xUpdate);.... 
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
f670: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
f680: 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  in = new UnsafeN
f690: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
f6a0: 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gin(..          
f6b0: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
f6c0: 2e 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20  .xBegin);....   
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
f6e0: 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20  iveModule.xSync 
f6f0: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
f700: 76 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28  veMethods.xSync(
f710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f720: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53 79        module.xSy
f730: 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nc);....        
f740: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
f750: 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e  dule.xCommit = n
f760: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
f770: 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d  ethods.xCommit(.
f780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f790: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d       module.xCom
f7a0: 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mit);....       
f7b0: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
f7c0: 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
f7d0: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
f7e0: 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62  veMethods.xRollb
f7f0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
f800: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
f810: 2e 78 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  .xRollback);....
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f830: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
f840: 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77  ndFunction = new
f850: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f860: 68 6f 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69  hods.xFindFuncti
f870: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f880: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
f890: 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d  xFindFunction);.
f8a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f8b0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
f8c0: 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e  xRename = new Un
f8d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f8e0: 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  s.xRename(..    
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 6d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 29 3b  module.xRename);
f910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f920: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
f930: 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65  .xSavepoint = ne
f940: 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
f950: 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74  thods.xSavepoint
f960: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f970: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 53         module.xS
f980: 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20  avepoint);....  
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
f9a0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65  tiveModule.xRele
f9b0: 61 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ase = new Unsafe
f9c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52  NativeMethods.xR
f9d0: 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20  elease(..       
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
f9f0: 75 6c 65 2e 78 52 65 6c 65 61 73 65 29 3b 0d 0a  ule.xRelease);..
fa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa10: 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
fa20: 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77  RollbackTo = new
fa30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fa40: 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  hods.xRollbackTo
fa50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fa60: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52         module.xR
fa70: 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20 20  ollbackTo);..   
fa80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
fa90: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
faa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fac0: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
fad0: 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
fae0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72 65  tiveMethods.xCre
faf0: 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
fb00: 20 20 20 20 20 20 20 20 20 20 78 43 72 65 61 74            xCreat
fb10: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
fb20: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
fb30: 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20 3d 20 6e  ule.xConnect = n
fb40: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
fb50: 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65 63 74 28  ethods.xConnect(
fb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb70: 20 20 20 20 20 20 78 43 6f 6e 6e 65 63 74 29 3b        xConnect);
fb80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fb90: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
fba0: 2e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65  .xBestIndex = ne
fbb0: 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
fbc0: 74 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78  thods.xBestIndex
fbd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fbe0: 20 20 20 20 20 20 20 78 42 65 73 74 49 6e 64 65         xBestInde
fbf0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x);....         
fc00: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
fc10: 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20  ule.xDisconnect 
fc20: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
fc30: 76 65 4d 65 74 68 6f 64 73 2e 78 44 69 73 63 6f  veMethods.xDisco
fc40: 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 78 44 69 73              xDis
fc60: 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20  connect);....   
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fc80: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72  iveModule.xDestr
fc90: 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  oy = new UnsafeN
fca0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65  ativeMethods.xDe
fcb0: 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20  stroy(..        
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 78 44 65 73              xDes
fcd0: 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  troy);....      
fce0: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
fcf0: 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3d 20 6e  Module.xOpen = n
fd00: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
fd10: 65 74 68 6f 64 73 2e 78 4f 70 65 6e 28 78 4f 70  ethods.xOpen(xOp
fd20: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  en);..          
fd30: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
fd40: 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20  le.xClose = new 
fd50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fd60: 6f 64 73 2e 78 43 6c 6f 73 65 28 78 43 6c 6f 73  ods.xClose(xClos
fd70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
fd80: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
fd90: 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65  ule.xFilter = ne
fda0: 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
fdb0: 74 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a  thods.xFilter(..
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 20 20 78 46 69 6c 74 65 72 29 3b 0d 0a 0d      xFilter);...
fde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdf0: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e   nativeModule.xN
fe00: 65 78 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ext = new Unsafe
fe10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4e  NativeMethods.xN
fe20: 65 78 74 28 78 4e 65 78 74 29 3b 0d 0a 20 20 20  ext(xNext);..   
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fe40: 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 20 3d  iveModule.xEof =
fe50: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
fe60: 65 4d 65 74 68 6f 64 73 2e 78 45 6f 66 28 78 45  eMethods.xEof(xE
fe70: 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  of);....        
fe80: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
fe90: 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e  dule.xColumn = n
fea0: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
feb0: 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d  ethods.xColumn(.
fec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fed0: 20 20 20 20 20 78 43 6f 6c 75 6d 6e 29 3b 0d 0a       xColumn);..
fee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fef0: 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
ff00: 52 6f 77 49 64 20 3d 20 6e 65 77 20 55 6e 73 61  RowId = new Unsa
ff10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ff20: 78 52 6f 77 49 64 28 78 52 6f 77 49 64 29 3b 0d  xRowId(xRowId);.
ff30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ff40: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
ff50: 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55 6e  xUpdate = new Un
ff60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ff70: 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  s.xUpdate(..    
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 78 55 70 64 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xUpdate);....   
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
ffb0: 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69 6e  iveModule.xBegin
ffc0: 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
ffd0: 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 67 69  iveMethods.xBegi
ffe0: 6e 28 78 42 65 67 69 6e 29 3b 0d 0a 20 20 20 20  n(xBegin);..    
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
10000 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 20 3d  veModule.xSync =
10010 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
10020 65 4d 65 74 68 6f 64 73 2e 78 53 79 6e 63 28 78  eMethods.xSync(x
10030 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Sync);....      
10040 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
10050 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d  Module.xCommit =
10060 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
10070 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6d 6d 69 74  eMethods.xCommit
10080 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10090 20 20 20 20 20 20 20 78 43 6f 6d 6d 69 74 29 3b         xCommit);
100a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
100b0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
100c0 2e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77  .xRollback = new
100d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
100e0 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d  hods.xRollback(.
100f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10100 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 29 3b       xRollback);
10110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10120 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
10130 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d  .xFindFunction =
10140 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
10150 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64 46 75  eMethods.xFindFu
10160 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 78 46 69               xFi
10180 6e 64 46 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a  ndFunction);....
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  nativeModule.xRe
101b0 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  name = new Unsaf
101c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
101d0 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  Rename(..       
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65               xRe
101f0 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
10200 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
10210 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
10220 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
10230 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76  tiveMethods.xSav
10240 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  epoint(..       
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 78 53 61               xSa
10260 76 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  vepoint);....   
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
10280 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c 65 61  iveModule.xRelea
10290 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  se = new UnsafeN
102a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65  ativeMethods.xRe
102b0 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
102c0 20 20 20 20 20 20 20 20 20 20 20 20 78 52 65 6c              xRel
102d0 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ease);....      
102e0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
102f0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
10300 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  To = new UnsafeN
10310 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f  ativeMethods.xRo
10320 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20  llbackTo(..     
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
10340 52 6f 6c 6c 62 61 63 6b 54 6f 29 3b 0d 0a 20 20  RollbackTo);..  
10350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10370 6e 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d  n nativeModule;.
10380 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10390 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
103a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
103b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
10400 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
10410 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
10420 23 72 65 67 69 6f 6e 20 4d 6f 64 75 6c 65 20 48  #region Module H
10430 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
10440 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
10450 20 76 69 72 74 75 61 6c 20 49 53 51 4c 69 74 65   virtual ISQLite
10460 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 43 72 65  NativeModule Cre
10470 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49  ateNativeModuleI
10480 6d 70 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  mpl()..        {
10490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
104a0 74 75 72 6e 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f  turn null; /* NO
104b0 54 45 3a 20 55 73 65 20 62 75 69 6c 74 2d 69 6e  TE: Use built-in
104c0 20 64 65 66 61 75 6c 74 73 2e 20 2a 2f 0d 0a 20   defaults. */.. 
104d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
104e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
104f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d  ///////////////.
10540 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
10550 6f 6e 20 4e 61 74 69 76 65 20 54 61 62 6c 65 20  on Native Table 
10560 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
10570 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
10580 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72  d virtual IntPtr
10590 20 41 6c 6c 6f 63 61 74 65 54 61 62 6c 65 28 29   AllocateTable()
105a0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
105b0 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a           int siz
105c0 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
105d0 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20  Of(typeof(..    
105e0 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
105f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10600 73 71 6c 69 74 65 33 5f 76 74 61 62 29 29 3b 0d  sqlite3_vtab));.
10610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
10620 65 74 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f  eturn SQLiteMemo
10630 72 79 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65  ry.Allocate(size
10640 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
10650 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
10660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ....        prot
106b0 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
106c0 69 64 20 5a 65 72 6f 54 61 62 6c 65 28 0d 0a 20  id ZeroTable(.. 
106d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
106e0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
106f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
10710 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50  f (pVtab == IntP
10720 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
10730 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10750 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b   int offset = 0;
10760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10770 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72  SQLiteMarshal.Wr
10780 69 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c  iteIntPtr(pVtab,
10790 20 6f 66 66 73 65 74 2c 20 49 6e 74 50 74 72 2e   offset, IntPtr.
107a0 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
107b0 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
107c0 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a  IntPtr.Size;....
107d0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
107e0 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49  teMarshal.WriteI
107f0 6e 74 33 32 28 70 56 74 61 62 2c 20 6f 66 66 73  nt32(pVtab, offs
10800 65 74 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  et, 0);....     
10810 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
10820 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d   sizeof(int);...
10830 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
10840 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65  iteMarshal.Write
10850 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66  IntPtr(pVtab, of
10860 66 73 65 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72  fset, IntPtr.Zer
10870 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  o);..        }..
10880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
10890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  /....        pro
108e0 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
108f0 6f 69 64 20 46 72 65 65 54 61 62 6c 65 28 0d 0a  oid FreeTable(..
10900 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
10910 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
10920 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10940 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
10950 74 61 62 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  tab, null);..   
10960 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
10970 65 6d 6f 72 79 2e 46 72 65 65 28 70 56 74 61 62  emory.Free(pVtab
10980 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
10990 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
109a0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
109b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10a00 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 43  #region Native C
10a10 75 72 73 6f 72 20 48 65 6c 70 65 72 20 4d 65 74  ursor Helper Met
10a20 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
10a30 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
10a40 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 43  IntPtr AllocateC
10a50 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20 20 20  ursor()..       
10a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10a70 69 6e 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68  int size = Marsh
10a80 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66  al.SizeOf(typeof
10a90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10aa0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10ab0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
10ac0 74 61 62 5f 63 75 72 73 6f 72 29 29 3b 0d 0a 0d  tab_cursor));...
10ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
10ae0 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  urn SQLiteMemory
10af0 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65 29 3b  .Allocate(size);
10b00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
10b10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10b60 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
10b70 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64  ted virtual void
10b80 20 46 72 65 65 43 75 72 73 6f 72 28 0d 0a 20 20   FreeCursor(..  
10b90 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
10ba0 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
10bb0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10bd0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
10be0 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20  e(pCursor);..   
10bf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10c00 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
10c10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10c60 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
10c70 20 54 61 62 6c 65 20 4c 6f 6f 6b 75 70 20 4d 65   Table Lookup Me
10c80 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70  thods..        p
10c90 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
10ca0 20 49 6e 74 50 74 72 20 54 61 62 6c 65 46 72 6f   IntPtr TableFro
10cb0 6d 43 75 72 73 6f 72 28 0d 0a 20 20 20 20 20 20  mCursor(..      
10cc0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
10cd0 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
10ce0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10d00 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74  pCursor == IntPt
10d10 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
10d20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10d30 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
10d40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10d50 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  rn Marshal.ReadI
10d60 6e 74 50 74 72 28 70 43 75 72 73 6f 72 29 3b 0d  ntPtr(pCursor);.
10d70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10d80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10dd0 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
10de0 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ed virtual SQLit
10df0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61  eVirtualTable Ta
10e00 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a  bleFromIntPtr(..
10e10 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
10e20 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
10e30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10e50 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74  if (pVtab == Int
10e60 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
10e70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10e80 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
10e90 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 22  leError(pVtab, "
10ea0 69 6e 76 61 6c 69 64 20 6e 61 74 69 76 65 20 74  invalid native t
10eb0 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 20  able");..       
10ec0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10ed0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10ee0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10ef0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
10f00 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 0d  lTable table;...
10f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
10f20 28 28 74 61 62 6c 65 73 20 21 3d 20 6e 75 6c 6c  ((tables != null
10f30 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
10f40 20 20 20 20 20 20 74 61 62 6c 65 73 2e 54 72 79        tables.Try
10f50 47 65 74 56 61 6c 75 65 28 70 56 74 61 62 2c 20  GetValue(pVtab, 
10f60 6f 75 74 20 74 61 62 6c 65 29 29 0d 0a 20 20 20  out table))..   
10f70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10f80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10f90 72 6e 20 74 61 62 6c 65 3b 0d 0a 20 20 20 20 20  rn table;..     
10fa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10fb0 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
10fc0 45 72 72 6f 72 28 70 56 74 61 62 2c 20 53 74 72  Error(pVtab, Str
10fd0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
10ff0 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
11000 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
11010 20 20 20 20 20 20 20 20 20 20 22 6d 61 6e 61 67            "manag
11020 65 64 20 74 61 62 6c 65 20 66 6f 72 20 7b 30 7d  ed table for {0}
11030 20 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 70 56 74   not found", pVt
11040 61 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ab));....       
11050 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
11060 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
11070 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
110c0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  ...        prote
110d0 63 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74  cted virtual Int
110e0 50 74 72 20 54 61 62 6c 65 54 6f 49 6e 74 50 74  Ptr TableToIntPt
110f0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
11100 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
11110 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  le table..      
11120 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
11130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11140 69 66 20 28 28 74 61 62 6c 65 20 3d 3d 20 6e 75  if ((table == nu
11150 6c 6c 29 20 7c 7c 20 28 74 61 62 6c 65 73 20 3d  ll) || (tables =
11160 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
11170 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11180 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
11190 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
111a0 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74 50  Ptr pVtab = IntP
111b0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
111c0 20 20 20 20 20 20 62 6f 6f 6c 20 73 75 63 63 65        bool succe
111d0 73 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ss = false;.... 
111e0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
111f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
11210 56 74 61 62 20 3d 20 41 6c 6c 6f 63 61 74 65 54  Vtab = AllocateT
11220 61 62 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  able();....     
11230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
11240 56 74 61 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Vtab != IntPtr.Z
11250 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
11260 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 5a 65 72               Zer
11280 6f 54 61 62 6c 65 28 70 56 74 61 62 29 3b 0d 0a  oTable(pVtab);..
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 74 61 62 6c 65 2e 4e 61 74 69 76 65      table.Native
112b0 48 61 6e 64 6c 65 20 3d 20 70 56 74 61 62 3b 0d  Handle = pVtab;.
112c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112d0 20 20 20 20 20 74 61 62 6c 65 73 2e 41 64 64 28       tables.Add(
112e0 70 56 74 61 62 2c 20 74 61 62 6c 65 29 3b 0d 0a  pVtab, table);..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 20 20 73 75 63 63 65 73 73 20 3d 20 74 72      success = tr
11310 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11320 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11330 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11340 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
11350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11360 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
11370 73 75 63 63 65 73 73 20 26 26 20 28 70 56 74 61  success && (pVta
11380 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b != IntPtr.Zero
11390 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
113a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
113b0 20 20 20 20 20 20 20 20 20 20 20 46 72 65 65 54             FreeT
113c0 61 62 6c 65 28 70 56 74 61 62 29 3b 0d 0a 20 20  able(pVtab);..  
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74 72    pVtab = IntPtr
113f0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
11400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11410 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
11430 56 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Vtab;..        }
11440 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
11450 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
11460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
114b0 20 20 20 23 72 65 67 69 6f 6e 20 43 75 72 73 6f     #region Curso
114c0 72 20 4c 6f 6f 6b 75 70 20 4d 65 74 68 6f 64 73  r Lookup Methods
114d0 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
114e0 74 65 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69  ted virtual SQLi
114f0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
11500 72 73 6f 72 20 43 75 72 73 6f 72 46 72 6f 6d 49  rsor CursorFromI
11510 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
11520 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
11530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
11540 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
11550 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11570 20 20 20 20 20 69 66 20 28 70 43 75 72 73 6f 72       if (pCursor
11580 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
11590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
115a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115b0 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
115c0 56 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e  Vtab, "invalid n
115d0 61 74 69 76 65 20 63 75 72 73 6f 72 22 29 3b 0d  ative cursor");.
115e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115f0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
11600 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11610 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11620 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
11630 72 73 6f 72 20 63 75 72 73 6f 72 3b 0d 0a 0d 0a  rsor cursor;....
11640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11650 28 63 75 72 73 6f 72 73 20 21 3d 20 6e 75 6c 6c  (cursors != null
11660 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
11670 20 20 20 20 20 20 63 75 72 73 6f 72 73 2e 54 72        cursors.Tr
11680 79 47 65 74 56 61 6c 75 65 28 70 43 75 72 73 6f  yGetValue(pCurso
11690 72 2c 20 6f 75 74 20 63 75 72 73 6f 72 29 29 0d  r, out cursor)).
116a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 72 65 74 75 72 6e 20 63 75 72 73 6f 72 3b 0d 0a  return cursor;..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
116e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
116f0 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
11700 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
11710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11720 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
11730 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11750 6d 61 6e 61 67 65 64 20 63 75 72 73 6f 72 20 66  managed cursor f
11760 6f 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64  or {0} not found
11770 22 2c 20 70 43 75 72 73 6f 72 29 29 3b 0d 0a 0d  ", pCursor));...
11780 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11790 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
117a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
117b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11800 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
11810 74 75 61 6c 20 49 6e 74 50 74 72 20 43 75 72 73  tual IntPtr Curs
11820 6f 72 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20  orToIntPtr(..   
11830 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
11840 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
11850 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20  r cursor..      
11860 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
11870 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11880 69 66 20 28 28 63 75 72 73 6f 72 20 3d 3d 20 6e  if ((cursor == n
11890 75 6c 6c 29 20 7c 7c 20 28 63 75 72 73 6f 72 73  ull) || (cursors
118a0 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
118b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
118c0 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d  rn IntPtr.Zero;.
118d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
118e0 6e 74 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20  ntPtr pCursor = 
118f0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
11900 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
11910 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b 0d  uccess = false;.
11920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
11930 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
11940 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11950 20 20 20 70 43 75 72 73 6f 72 20 3d 20 41 6c 6c     pCursor = All
11960 6f 63 61 74 65 43 75 72 73 6f 72 28 29 3b 0d 0a  ocateCursor();..
11970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11980 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 21 3d    if (pCursor !=
11990 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
119b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
119c0 20 20 20 20 20 20 63 75 72 73 6f 72 2e 4e 61 74        cursor.Nat
119d0 69 76 65 48 61 6e 64 6c 65 20 3d 20 70 43 75 72  iveHandle = pCur
119e0 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sor;..          
119f0 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
11a00 73 2e 41 64 64 28 70 43 75 72 73 6f 72 2c 20 63  s.Add(pCursor, c
11a10 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  ursor);..       
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 63               suc
11a30 63 65 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20  cess = true;..  
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11a60 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
11a70 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
11a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11a90 20 20 20 20 69 66 20 28 21 73 75 63 63 65 73 73      if (!success
11aa0 20 26 26 20 28 70 43 75 72 73 6f 72 20 21 3d 20   && (pCursor != 
11ab0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ae0 20 20 20 20 20 20 46 72 65 65 43 75 72 73 6f 72        FreeCursor
11af0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 70 43 75 72 73 6f 72 20 3d 20 49 6e 74 50 74 72  pCursor = IntPtr
11b20 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
11b30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11b40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
11b60 43 75 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20  Cursor;..       
11b70 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
11b80 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
11b90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
11be0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 61 62       #region Tab
11bf0 6c 65 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 48  le Declaration H
11c00 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
11c10 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
11c20 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 45   virtual SQLiteE
11c30 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65  rrorCode Declare
11c40 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
11c50 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
11c60 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion connection,
11c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
11c80 72 69 6e 67 20 73 71 6c 2c 0d 0a 20 20 20 20 20  ring sql,..     
11c90 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
11ca0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
11cb0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
11cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
11cd0 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d  f (connection ==
11ce0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11d00 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
11d10 69 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63 74 69  invalid connecti
11d20 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
11d30 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11d40 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
11d50 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or;..           
11d60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11d70 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c    SQLiteBase sql
11d80 69 74 65 42 61 73 65 20 3d 20 63 6f 6e 6e 65 63  iteBase = connec
11d90 74 69 6f 6e 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  tion._sql;....  
11da0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 71            if (sq
11db0 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75 6c 6c  liteBase == null
11dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11de0 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65    error = "conne
11df0 63 74 69 6f 6e 20 68 61 73 20 69 6e 76 61 6c 69  ction has invali
11e00 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20  d handle";..    
11e10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11e20 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
11e30 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
11e40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11e50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
11e60 71 6c 69 74 65 42 61 73 65 2e 44 65 63 6c 61 72  qliteBase.Declar
11e70 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 74 68  eVirtualTable(th
11e80 69 73 2c 20 73 71 6c 2c 20 72 65 66 20 65 72 72  is, sql, ref err
11e90 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  or);..        }.
11ea0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
11eb0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
11ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11f10 20 20 23 72 65 67 69 6f 6e 20 45 72 72 6f 72 20    #region Error 
11f20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72 20  Handling Helper 
11f30 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
11f40 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
11f50 61 6c 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65  al bool SetTable
11f60 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20  Error(..        
11f70 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
11f80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
11f90 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
11fa0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
11fb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11fc0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11fd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11fe0 20 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45 72         if (LogEr
11ff0 72 6f 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20  rors)..         
12000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
12020 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
12030 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
12040 64 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20  de.Error,..     
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
12070 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
12080 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 20 20 20 20 20 22 56 69 72 74 75 61 6c 20 74        "Virtual t
120b0 61 62 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22  able error: {0}"
120c0 2c 20 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68  , error)); /* th
120d0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
120e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
120f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12100 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
12110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
12130 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
12140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12150 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74           if (pVt
12160 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab == IntPtr.Zer
12170 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
12180 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
12190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
121a0 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e   int offset = In
121b0 74 50 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65  tPtr.Size + size
121c0 6f 66 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  of(int);..      
121d0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72        IntPtr pEr
121e0 72 6f 72 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  ror = SQLiteMars
121f0 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70  hal.ReadIntPtr(p
12200 56 74 61 62 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  Vtab, offset);..
12210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12220 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50   (pError != IntP
12230 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
12240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12250 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
12260 65 6d 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f  emory.Free(pErro
12270 72 29 3b 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  r); pError = Int
12280 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
12290 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
122a0 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e  eMarshal.WriteIn
122b0 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73  tPtr(pVtab, offs
122c0 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  et, pError);..  
122d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
122e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
122f0 72 72 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rror == null).. 
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12310 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
12320 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12330 73 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b  success = false;
12340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12350 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
12360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12370 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c      pError = SQL
12380 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
12390 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65  tPtrFromString(e
123a0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
123b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61          SQLiteMa
123c0 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
123d0 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c  r(pVtab, offset,
123e0 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20   pError);..     
123f0 20 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65             succe
12400 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ss = true;..    
12410 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12420 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
12430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12450 66 20 28 21 73 75 63 63 65 73 73 20 26 26 20 28  f (!success && (
12460 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
12470 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20  .Zero))..       
12480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
124b0 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
124e0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
124f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12500 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12510 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 75         return su
12520 63 63 65 73 73 3b 0d 0a 20 20 20 20 20 20 20 20  ccess;..        
12530 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
12540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12580 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
12590 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
125a0 6c 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c 65 45  l bool SetTableE
125b0 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rror(..         
125c0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
125d0 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
125e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
125f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
12600 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
12610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12620 20 28 74 61 62 6c 65 20 3d 3d 20 6e 75 6c 6c 29   (table == null)
12630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12640 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
12650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
12660 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 74 61  ntPtr pVtab = ta
12670 62 6c 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65  ble.NativeHandle
12680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12690 20 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e   if (pVtab == In
126a0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
126b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
126c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
126d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
126e0 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
126f0 74 61 62 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20  tab, error);..  
12700 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
12720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12760 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
12770 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74  virtual bool Set
12780 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20  CursorError(..  
12790 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
127a0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
127b0 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20 20  or cursor,..    
127c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
127d0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
127e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
127f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12800 63 75 72 73 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d  cursor == null).
12810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12820 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
12840 74 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20 63  tPtr pCursor = c
12850 75 72 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64  ursor.NativeHand
12860 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
12870 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d     if (pCursor =
12880 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
128b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
128c0 50 74 72 20 70 56 74 61 62 20 3d 20 54 61 62 6c  Ptr pVtab = Tabl
128d0 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72  eFromCursor(pCur
128e0 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
128f0 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d       if (pVtab =
12900 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12930 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
12940 75 72 6e 20 53 65 74 54 61 62 6c 65 45 72 72 6f  urn SetTableErro
12950 72 28 70 56 74 61 62 2c 20 65 72 72 6f 72 29 3b  r(pVtab, error);
12960 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
12970 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
12980 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
129e0 65 67 69 6f 6e 20 49 6e 64 65 78 20 48 61 6e 64  egion Index Hand
129f0 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68  ling Helper Meth
12a00 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ods..        pro
12a10 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62  tected virtual b
12a20 6f 6f 6c 20 53 65 74 45 73 74 69 6d 61 74 65 64  ool SetEstimated
12a30 43 6f 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Cost(..         
12a40 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
12a50 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndex,..         
12a60 20 20 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61     double estima
12a70 74 65 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20  tedCost..       
12a80 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
12a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
12aa0 66 20 28 28 69 6e 64 65 78 20 3d 3d 20 6e 75 6c  f ((index == nul
12ab0 6c 29 20 7c 7c 20 28 69 6e 64 65 78 2e 4f 75 74  l) || (index.Out
12ac0 70 75 74 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  puts == null))..
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64  .            ind
12b00 65 78 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  ex.Outputs.Estim
12b10 61 74 65 64 43 6f 73 74 20 3d 20 65 73 74 69 6d  atedCost = estim
12b20 61 74 65 64 43 6f 73 74 3b 0d 0a 20 20 20 20 20  atedCost;..     
12b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
12b40 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
12b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
12b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ba0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  /....        pro
12bb0 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62  tected virtual b
12bc0 6f 6f 6c 20 53 65 74 45 73 74 69 6d 61 74 65 64  ool SetEstimated
12bd0 43 6f 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Cost(..         
12be0 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
12bf0 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
12c00 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
12c10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12c20 72 6e 20 53 65 74 45 73 74 69 6d 61 74 65 64 43  rn SetEstimatedC
12c30 6f 73 74 28 69 6e 64 65 78 2c 20 44 65 66 61 75  ost(index, Defau
12c40 6c 74 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20 20  ltCost);..      
12c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
12c60 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
12c70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
12c80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
12c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
12cd0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
12ce0 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
12cf0 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
12d00 76 61 74 65 20 62 6f 6f 6c 20 6c 6f 67 45 72 72  vate bool logErr
12d10 6f 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 70 75  ors;..        pu
12d20 62 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f  blic virtual boo
12d30 6c 20 4c 6f 67 45 72 72 6f 72 73 0d 0a 20 20 20  l LogErrors..   
12d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12d50 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
12d60 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
12d70 6e 20 6c 6f 67 45 72 72 6f 72 73 3b 20 7d 0d 0a  n logErrors; }..
12d80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
12d90 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
12da0 29 3b 20 6c 6f 67 45 72 72 6f 72 73 20 3d 20 76  ); logErrors = v
12db0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
12dc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
12dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
12e20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6c 6f   private bool lo
12e30 67 45 78 63 65 70 74 69 6f 6e 73 3b 0d 0a 20 20  gExceptions;..  
12e40 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
12e50 74 75 61 6c 20 62 6f 6f 6c 20 4c 6f 67 45 78 63  tual bool LogExc
12e60 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  eptions..       
12e70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12e80 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
12e90 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6c 6f  sed(); return lo
12ea0 67 45 78 63 65 70 74 69 6f 6e 73 3b 20 7d 0d 0a  gExceptions; }..
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
12ec0 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
12ed0 29 3b 20 6c 6f 67 45 78 63 65 70 74 69 6f 6e 73  ); logExceptions
12ee0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
12ef0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12f00 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
12f10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
12f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
12f60 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
12f70 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   ISQLiteNativeMo
12f80 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  dule Members..  
12f90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
12fa0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
12fb0 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
12fc0 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d      IntPtr pDb,.
12fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
12fe0 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20  Ptr pAux,..     
12ff0 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c         int argc,
13000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
13010 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a 20 20  tPtr[] argv,..  
13020 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
13030 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
13040 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
13050 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
13060 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
13070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13080 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
13090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
130a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
130b0 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  eName = SQLiteSt
130c0 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55  ring.StringFromU
130d0 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13100 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66  ods.sqlite3_db_f
13110 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49 6e 74  ilename(pDb, Int
13120 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d 0a 20  Ptr.Zero));.... 
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
13140 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
13150 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
13160 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
13170 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61 6d 65     pDb, fileName
131a0 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
131b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
131e0 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e 75 6c  able table = nul
131f0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
13200 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
13210 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rror = null;....
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 69 66 20 28 43 72 65 61 74 65 28 63      if (Create(c
13240 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c  onnection, pAux,
13250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
13270 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e  LiteString.Strin
13280 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38 49 6e  gArrayFromUtf8In
13290 74 50 74 72 41 72 72 61 79 28 61 72 67 76 29 2c  tPtrArray(argv),
132a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
132c0 66 20 74 61 62 6c 65 2c 20 72 65 66 20 65 72 72  f table, ref err
132d0 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  or) == SQLiteErr
132e0 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13310 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
13320 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61        pVtab = Ta
13370 62 6c 65 54 6f 49 6e 74 50 74 72 28 74 61 62 6c  bleToIntPtr(tabl
13380 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
133b0 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
13430 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69  ror = SQLiteStri
13440 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
13450 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  mString(..      
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 74 61            "no ta
13480 62 6c 65 20 77 61 73 20 63 72 65 61 74 65 64 22  ble was created"
13490 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
134a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
134d0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
13510 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
13520 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
13530 72 6f 6d 53 74 72 69 6e 67 28 65 72 72 6f 72 29  romString(error)
13540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13550 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13570 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13580 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
13590 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
135a0 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
135b0 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
135c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
135d0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
135e0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
135f0 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
13600 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  ng(e.ToString())
13610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
13620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13630 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
13640 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
13650 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13660 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
13670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
136b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
136c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
136d0 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
136e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
136f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
13700 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
13710 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
13720 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
13730 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d 0a  IntPtr[] argv,..
13740 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
13750 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
13760 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49             ref I
13770 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20  ntPtr pError..  
13780 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
13790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
137a0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
137b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
137c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
137d0 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65  ileName = SQLite
137e0 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
137f0 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13820 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
13830 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49  _filename(pDb, I
13840 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d  ntPtr.Zero));...
13850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13860 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
13870 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
13880 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
13890 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138b0 20 20 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61       pDb, fileNa
138c0 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  me, false))..   
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
13900 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e  lTable table = n
13910 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
13920 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
13930 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a   error = null;..
13940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13950 20 20 20 20 20 20 69 66 20 28 43 6f 6e 6e 65 63        if (Connec
13960 74 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41  t(connection, pA
13970 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ux,..           
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
139a0 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66  ringArrayFromUtf
139b0 38 49 6e 74 50 74 72 41 72 72 61 79 28 61 72 67  8IntPtrArray(arg
139c0 76 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  v),..           
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20   ref table, ref 
139f0 65 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  error) == SQLite
13a00 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13a40 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
13a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d           pVtab =
13a90 20 54 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74   TableToIntPtr(t
13aa0 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  able);..        
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
13ad0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
13b60 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
13b70 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20  FromString(..   
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
13ba0 20 74 61 62 6c 65 20 77 61 73 20 63 72 65 61 74   table was creat
13bb0 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed");..         
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
13c00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
13c10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
13c40 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
13c50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72  trFromString(err
13c60 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
13c70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13ca0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
13cb0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
13cc0 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
13cd0 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
13ce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13cf0 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
13d00 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  r = SQLiteString
13d10 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
13d20 74 72 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67  tring(e.ToString
13d30 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
13d40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13d50 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
13d60 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
13d70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
13d80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
13dd0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
13de0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
13df0 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20  e xBestIndex(.. 
13e00 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
13e10 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
13e20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e        IntPtr pIn
13e30 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
13e40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
13e50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
13e60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
13e80 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
13e90 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46  e table = TableF
13ea0 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29  romIntPtr(pVtab)
13eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13ec0 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21       if (table !
13ed0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65  SQLiteIndex inde
13f10 78 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  x = null;....   
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49   SQLiteMarshal.I
13f40 6e 64 65 78 46 72 6f 6d 49 6e 74 50 74 72 28 70  ndexFromIntPtr(p
13f50 49 6e 64 65 78 2c 20 72 65 66 20 69 6e 64 65 78  Index, ref index
13f60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 42 65            if (Be
13f80 73 74 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69  stIndex(table, i
13f90 6e 64 65 78 29 20 3d 3d 20 53 51 4c 69 74 65 45  ndex) == SQLiteE
13fa0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
13fe0 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e 64 65 78  iteMarshal.Index
13ff0 54 6f 49 6e 74 50 74 72 28 69 6e 64 65 78 2c 20  ToIntPtr(index, 
14000 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20  pIndex);..      
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
14030 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20  rrorCode.Ok;..  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14060 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14070 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14080 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
14090 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
140a0 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
140b0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
140c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
140d0 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
140e0 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69  (pVtab, e.ToStri
140f0 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
14100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14110 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
14120 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
14130 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
14140 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
14150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
141a0 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ate SQLiteErrorC
141b0 6f 64 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  ode xDisconnect(
141c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
141d0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
141e0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
141f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14200 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
14210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14220 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
14230 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d  ualTable table =
14240 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72   TableFromIntPtr
14250 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
14260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14270 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  table != null)..
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
142a0 20 20 20 20 20 20 20 69 66 20 28 44 69 73 63 6f         if (Disco
142b0 6e 6e 65 63 74 28 74 61 62 6c 65 29 20 3d 3d 20  nnect(table) == 
142c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
142d0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
142e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 69 66 20 28 74 61 62 6c 65 73 20 21      if (tables !
14310 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 74 61 62 6c 65 73 2e 52 65 6d 6f       tables.Remo
14340 76 65 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  ve(pVtab);....  
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
14370 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
14380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14390 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
143a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
143b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
143c0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
143d0 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f  ception e) /* NO
143e0 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41  TE: Must catch A
143f0 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  LL. */..        
14400 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14410 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
14420 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
14430 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e  TE: At this poin
14440 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 77  t, there is no w
14450 61 79 20 74 6f 20 72 65 70 6f 72 74 20 74 68 65  ay to report the
14460 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
14470 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14480 20 63 6f 6e 64 69 74 69 6f 6e 20 62 61 63 6b 20   condition back 
14490 74 6f 20 74 68 65 20 63 61 6c 6c 65 72 3b 20 74  to the caller; t
144a0 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74 68  herefore, use th
144b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
144c0 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 67 67     //       logg
144d0 69 6e 67 20 66 61 63 69 6c 69 74 79 20 69 6e 73  ing facility ins
144e0 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  tead...         
144f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
14500 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14530 20 20 20 20 20 20 20 69 66 20 28 4c 6f 67 45 78         if (LogEx
14540 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20  ceptions)..     
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14570 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
14580 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
14590 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f  QLiteBase.COR_E_
145a0 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20  EXCEPTION,..    
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
145d0 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
145e0 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
145f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14610 43 61 75 67 68 74 20 65 78 63 65 70 74 69 6f 6e  Caught exception
14620 20 69 6e 20 5c 22 78 44 69 73 63 6f 6e 6e 65 63   in \"xDisconnec
14630 74 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22  t\" method: {0}"
14640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14660 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
14670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14680 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
146a0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
146b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
146d0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
146e0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
146f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14700 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14710 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
14720 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
14740 72 65 65 54 61 62 6c 65 28 70 56 74 61 62 29 3b  reeTable(pVtab);
14750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
14770 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
14780 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
14790 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
147a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
147b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
147f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
14800 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44  LiteErrorCode xD
14810 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
14820 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
14830 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
14840 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
14850 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
14860 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
14880 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
14890 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
148a0 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
148b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
148c0 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
148d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
148e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14900 20 28 44 65 73 74 72 6f 79 28 74 61 62 6c 65 29   (Destroy(table)
14910 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
14920 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
14960 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 73 2e           tables.
14990 52 65 6d 6f 76 65 28 70 56 74 61 62 29 3b 0d 0a  Remove(pVtab);..
149a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
149c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
149d0 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok;..          
149e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14a00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14a10 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
14a20 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
14a30 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
14a40 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
14a50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14a60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14a80 2f 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20  / NOTE: At this 
14a90 70 6f 69 6e 74 2c 20 74 68 65 72 65 20 69 73 20  point, there is 
14aa0 6e 6f 20 77 61 79 20 74 6f 20 72 65 70 6f 72 74  no way to report
14ab0 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..    
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14ad0 20 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 62       condition b
14ae0 61 63 6b 20 74 6f 20 74 68 65 20 63 61 6c 6c 65  ack to the calle
14af0 72 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73  r; therefore, us
14b00 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  e the..         
14b10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
14b20 6c 6f 67 67 69 6e 67 20 66 61 63 69 6c 69 74 79  logging facility
14b30 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20   instead...     
14b40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14b60 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
14b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14b80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4c             if (L
14b90 6f 67 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20  ogExceptions).. 
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
14bd0 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
14be0 67 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f  ge(SQLiteBase.CO
14bf0 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a  R_E_EXCEPTION,..
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
14c20 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
14c30 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
14c40 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70     "Caught excep
14c70 74 69 6f 6e 20 69 6e 20 5c 22 78 44 65 73 74 72  tion in \"xDestr
14c80 6f 79 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d  oy\" method: {0}
14c90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
14cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14cd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14ce0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
14d00 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
14d10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14d20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
14d30 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
14d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14d50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14d60 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
14d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 46 72 65 65 54 61 62 6c 65 28 70 56 74 61 62 29  FreeTable(pVtab)
14da0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
14db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14dc0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
14dd0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
14de0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14df0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
14e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
14e40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
14e50 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
14e60 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
14e70 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c     IntPtr pVtab,
14e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
14e90 66 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72  f IntPtr pCursor
14ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
14eb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14ec0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
14ed0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
14ef0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
14f00 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d  able = TableFrom
14f10 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a  IntPtr(pVtab);..
14f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f30 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
14f40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14f50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
14f70 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
14f80 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 6e  ursor cursor = n
14f90 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14fb0 4f 70 65 6e 28 74 61 62 6c 65 2c 20 72 65 66 20  Open(table, ref 
14fc0 63 75 72 73 6f 72 29 20 3d 3d 20 53 51 4c 69 74  cursor) == SQLit
14fd0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15010 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c  f (cursor != nul
15020 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 70 43 75 72 73             pCurs
15060 6f 72 20 3d 20 43 75 72 73 6f 72 54 6f 49 6e 74  or = CursorToInt
15070 50 74 72 28 63 75 72 73 6f 72 29 3b 0d 0a 0d 0a  Ptr(cursor);....
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
150a0 70 43 75 72 73 6f 72 20 21 3d 20 49 6e 74 50 74  pCursor != IntPt
150b0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
15100 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
15110 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15150 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
151a0 72 28 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r(pVtab,..      
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
151d0 6f 20 6e 61 74 69 76 65 20 63 75 72 73 6f 72 20  o native cursor 
151e0 77 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d 0a  was created");..
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
15280 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
15290 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 22 6e 6f 20 6d 61 6e 61 67 65 64       "no managed
152c0 20 63 75 72 73 6f 72 20 77 61 73 20 63 72 65 61   cursor was crea
152d0 74 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ted");..        
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15300 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15320 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15330 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
15340 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
15350 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
15360 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
15370 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15380 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
15390 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
153a0 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
153b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
153c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
153d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
153e0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
153f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
15400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15440 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15450 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
15460 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65 28  rrorCode xClose(
15470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
15480 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
15490 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
154a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
154b0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
154c0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
154d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
154e0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
154f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15500 20 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65     pVtab = Table
15510 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73  FromCursor(pCurs
15520 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
15530 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
15540 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
15550 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72   cursor = Cursor
15560 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f 72 29   pVtab, pCursor)
15590 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
155a0 20 20 20 20 20 69 66 20 28 63 75 72 73 6f 72 20       if (cursor 
155b0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
155c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 69 66 20 28 43 6c 6f 73 65 28 63 75 72 73 6f   if (Close(curso
155f0 72 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  r) == SQLiteErro
15600 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15630 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
15640 72 73 6f 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  rsors != null)..
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73              curs
15670 6f 72 73 2e 52 65 6d 6f 76 65 28 70 43 75 72 73  ors.Remove(pCurs
15680 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
156b0 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20  orCode.Ok;..    
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
156e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
156f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15700 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
15710 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75  n e) /* NOTE: Mu
15720 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f  st catch ALL. */
15730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15750 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
15760 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67  Vtab, e.ToString
15770 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
15780 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15790 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
157a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
157b0 20 20 20 20 20 20 20 20 20 46 72 65 65 43 75 72           FreeCur
157c0 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20  sor(pCursor);.. 
157d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
157e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
157f0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
15800 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
15810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15860 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15870 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
15880 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
15890 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
158a0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
158b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
158c0 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20  t idxNum,..     
158d0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64         IntPtr id
158e0 78 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  xStr,..         
158f0 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
15900 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
15910 5b 5d 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20  [] argv..       
15920 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
15930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
15940 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e  ntPtr pVtab = In
15950 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
15960 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
15970 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
15990 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43  tab = TableFromC
159a0 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  ursor(pCursor);.
159b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
159c0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
159d0 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
159e0 6f 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49  or = CursorFromI
159f0 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
15a00 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
15a10 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  b, pCursor);....
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 69 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75  if (cursor != nu
15a40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15a50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15a60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15a70 46 69 6c 74 65 72 28 63 75 72 73 6f 72 2c 20 69  Filter(cursor, i
15a80 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  dxNum,..        
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67      SQLiteString
15ab0 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49  .StringFromUtf8I
15ac0 6e 74 50 74 72 28 69 64 78 53 74 72 29 2c 0d 0a  ntPtr(idxStr),..
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
15af0 74 65 4d 61 72 73 68 61 6c 2e 56 61 6c 75 65 41  teMarshal.ValueA
15b00 72 72 61 79 46 72 6f 6d 49 6e 74 50 74 72 41 72  rrayFromIntPtrAr
15b10 72 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ray(..          
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 20 20 61 72 67 76 29 29 20 3d 3d 20        argv)) == 
15b40 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15b50 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
15b60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
15b90 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15bc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15be0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
15bf0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
15c00 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
15c10 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
15c20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15c30 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
15c40 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
15c50 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
15c60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15c70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
15c80 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
15c90 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
15ca0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
15cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cf0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
15d00 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
15d10 72 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20  rCode xNext(..  
15d20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
15d30 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
15d40 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
15d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15d60 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 49  IntPtr pVtab = I
15d70 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
15d80 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
15d90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
15db0 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d  Vtab = TableFrom
15dc0 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b  Cursor(pCursor);
15dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15de0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
15df0 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
15e00 73 6f 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d  sor = CursorFrom
15e10 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
15e30 61 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  ab, pCursor);...
15e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e50 20 69 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e   if (cursor != n
15e60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15e70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15e90 28 4e 65 78 74 28 63 75 72 73 6f 72 29 20 3d 3d  (Next(cursor) ==
15ea0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15eb0 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15ed0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
15ee0 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
15ef0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15f00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15f10 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
15f20 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
15f30 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
15f40 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
15f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15f60 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
15f70 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
15f80 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
15f90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15fa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15fb0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15fc0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
15fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
15fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16030 20 70 72 69 76 61 74 65 20 69 6e 74 20 78 45 6f   private int xEo
16040 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
16050 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
16060 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
16070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16080 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
16090 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ab = IntPtr.Zero
160a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
160b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
160c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
160d0 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62       pVtab = Tab
160e0 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75  leFromCursor(pCu
160f0 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
16100 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16110 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
16120 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73  or cursor = Curs
16130 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  orFromIntPtr(.. 
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f     pVtab, pCurso
16160 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
16170 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f         if (curso
16180 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 72 65 74 75 72 6e 20 45 6f 66 28 63 75 72 73 6f  return Eof(curso
161b0 72 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 20 20 20  r) ? 1 : 0;..   
161c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
161d0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
161e0 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
161f0 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
16200 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
16210 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16220 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
16230 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
16240 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
16250 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16270 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   1;..        }..
16280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
16290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
162a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
162b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
162c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
162d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
162e0 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
162f0 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28 0d 0a 20  Code xColumn(.. 
16300 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
16310 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20  r pCursor,..    
16320 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
16330 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  Context,..      
16340 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 0d        int index.
16350 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
16360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16370 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
16380 74 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tab = IntPtr.Zer
16390 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
163a0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
163b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
163c0 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61        pVtab = Ta
163d0 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43  bleFromCursor(pC
163e0 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
163f0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16400 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
16410 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72  sor cursor = Cur
16420 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a  sorFromIntPtr(..
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73      pVtab, pCurs
16450 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
16460 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73          if (curs
16470 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or != null)..   
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 74 65 78      SQLiteContex
164b0 74 20 63 6f 6e 74 65 78 74 20 3d 20 6e 65 77 20  t context = new 
164c0 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 70 43  SQLiteContext(pC
164d0 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  ontext);....    
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 72 65 74 75 72 6e 20 43 6f 6c 75 6d 6e 28 63 75  return Column(cu
16500 72 73 6f 72 2c 20 63 6f 6e 74 65 78 74 2c 20 69  rsor, context, i
16510 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
16520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16540 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
16550 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
16560 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
16570 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
16580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16590 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
165a0 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
165b0 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
165c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
165d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
165e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
165f0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
16600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
16660 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
16670 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a  orCode xRowId(..
16680 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
16690 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
166a0 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e           ref lon
166b0 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20  g rowId..       
166c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
166d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
166e0 6e 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e  ntPtr pVtab = In
166f0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
16700 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
16710 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
16730 74 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43  tab = TableFromC
16740 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d  ursor(pCursor);.
16750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16760 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
16770 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
16780 6f 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49  or = CursorFromI
16790 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
167a0 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
167b0 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  b, pCursor);....
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 69 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75  if (cursor != nu
167e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
167f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16800 52 6f 77 49 64 28 63 75 72 73 6f 72 2c 20 72 65  RowId(cursor, re
16810 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20  f rowId);..     
16820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16830 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
16840 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
16850 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
16860 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
16870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16880 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
16890 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
168a0 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
168b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
168c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
168d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
168e0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
168f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16940 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
16950 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
16960 6f 72 43 6f 64 65 20 78 55 70 64 61 74 65 28 0d  orCode xUpdate(.
16970 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
16980 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
16990 20 20 20 20 20 20 20 20 69 6e 74 20 6e 44 61 74          int nDat
169a0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
169b0 49 6e 74 50 74 72 20 61 70 44 61 74 61 2c 0d 0a  IntPtr apData,..
169c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
169d0 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20  long rowId..    
169e0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
169f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16a00 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
16a10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16a20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
16a30 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d  ualTable table =
16a40 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72   TableFromIntPtr
16a50 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
16a60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16a70 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  table != null)..
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16aa0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
16ab0 75 65 5b 5d 20 76 61 6c 75 65 73 20 3d 0d 0a 20  ue[] values =.. 
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
16ae0 73 68 61 6c 2e 56 61 6c 75 65 41 72 72 61 79 46  shal.ValueArrayF
16af0 72 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72  romSizeAndIntPtr
16b00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
16b20 44 61 74 61 2c 20 61 70 44 61 74 61 29 3b 0d 0a  Data, apData);..
16b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 70 64        return Upd
16b50 61 74 65 28 74 61 62 6c 65 2c 20 76 61 6c 75 65  ate(table, value
16b60 73 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a  s, ref rowId);..
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
16b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
16ba0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
16bb0 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
16bc0 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
16bd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
16bf0 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
16c00 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  b, e.ToString())
16c10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16c30 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
16c40 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
16c50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16c60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16cb0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
16cc0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
16cd0 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20  Begin(..        
16ce0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
16cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
16d00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16d10 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
16d20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16d30 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16d40 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
16d50 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d  able = TableFrom
16d60 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a  IntPtr(pVtab);..
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d80 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
16d90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16da0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16db0 20 42 65 67 69 6e 28 74 61 62 6c 65 29 3b 0d 0a   Begin(table);..
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16dd0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
16de0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
16df0 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
16e00 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
16e10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16e20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
16e30 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
16e40 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
16e50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
16e70 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
16e80 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
16e90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16ea0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ee0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16ef0 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
16f00 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 79 6e  teErrorCode xSyn
16f10 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c(..            
16f20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
16f30 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
16f40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16f50 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
16f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16f70 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
16f80 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
16f90 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50   = TableFromIntP
16fa0 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  tr(pVtab);....  
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16fc0 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
16fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16fe0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 79 6e        return Syn
16ff0 63 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  c(table);..     
17000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17010 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
17020 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
17030 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
17040 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
17050 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17060 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
17070 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
17080 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
17090 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
170a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
170b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
170c0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
170d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
170e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17120 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
17130 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
17140 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d  orCode xCommit(.
17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17160 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
17170 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
17180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17190 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
171a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
171b0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
171c0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
171d0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
171e0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
171f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
17200 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 72 65 74 75 72 6e 20 43 6f 6d 6d 69 74     return Commit
17230 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20  (table);..      
17240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17250 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
17260 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
17270 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
17280 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
17290 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
172a0 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
172b0 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
172c0 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
172d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
172e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
172f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
17300 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
17310 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
17320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17360 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
17370 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
17380 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28  rCode xRollback(
17390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
173a0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
173b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
173c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
173d0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
173e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
173f0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
17400 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d  ualTable table =
17410 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72   TableFromIntPtr
17420 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
17430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17440 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  table != null)..
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 72 65 74 75 72 6e 20 52 6f 6c 6c 62      return Rollb
17470 61 63 6b 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  ack(table);..   
17480 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17490 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
174a0 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
174b0 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
174c0 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
174d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
174e0 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
174f0 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
17500 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
17510 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17520 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17530 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17540 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
17550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
17560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
175a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
175b0 20 70 72 69 76 61 74 65 20 69 6e 74 20 78 46 69   private int xFi
175c0 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
175d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
175e0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
175f0 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20      int nArg,.. 
17600 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
17610 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  r zName,..      
17620 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
17630 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
17640 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17650 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
17660 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
17670 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
17680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
17690 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
176a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176b0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
176c0 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62  able table = Tab
176d0 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74  leFromIntPtr(pVt
176e0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
176f0 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
17700 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
17710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
17740 6e 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 75 6c  n function = nul
17750 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
17760 20 20 20 20 20 20 20 20 20 20 69 66 20 28 46 69            if (Fi
17770 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 2c 20           table, 
177a0 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  nArg,..         
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e     SQLiteString.
177d0 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
177e0 74 50 74 72 28 7a 4e 61 6d 65 29 2c 0d 0a 20 20  tPtr(zName),..  
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17800 20 20 20 20 20 20 20 20 20 20 72 65 66 20 66 75            ref fu
17810 6e 63 74 69 6f 6e 2c 20 72 65 66 20 70 43 6c 69  nction, ref pCli
17820 65 6e 74 44 61 74 61 29 29 0d 0a 20 20 20 20 20  entData))..     
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17850 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 75            if (fu
17860 6e 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  nction != null).
17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17880 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b          callback
178b0 20 3d 20 66 75 6e 63 74 69 6f 6e 2e 53 63 61 6c   = function.Scal
178c0 61 72 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20  arCallback;..   
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
178f0 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
17900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
17970 72 28 70 56 74 61 62 2c 20 22 6e 6f 20 66 75 6e  r(pVtab, "no fun
17980 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65  ction was create
17990 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d");..          
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
179b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
179d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
179e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
179f0 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
17a00 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
17a10 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
17a20 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
17a30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17a40 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
17a50 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
17a60 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
17a70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17a80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
17a90 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
17aa0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
17ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17af0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
17b00 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
17b10 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20  de xRename(..   
17b20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
17b30 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
17b40 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d      IntPtr zNew.
17b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
17b60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17b70 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
17b80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17b90 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17ba0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
17bb0 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49  ble = TableFromI
17bc0 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d  ntPtr(pVtab);...
17bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17be0 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
17bf0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
17c00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17c10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17c20 72 6e 20 52 65 6e 61 6d 65 28 74 61 62 6c 65 2c  rn Rename(table,
17c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c40 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
17c50 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
17c60 6d 55 74 66 38 49 6e 74 50 74 72 28 7a 4e 65 77  mUtf8IntPtr(zNew
17c70 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
17c80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17c90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17ca0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
17cb0 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
17cc0 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
17cd0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
17ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17cf0 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
17d00 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69  (pVtab, e.ToStri
17d10 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
17d20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17d30 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
17d40 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
17d50 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
17d60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
17d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
17dc0 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ate SQLiteErrorC
17dd0 6f 64 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d  ode xSavepoint(.
17de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17df0 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
17e00 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76          int iSav
17e10 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  epoint..        
17e20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
17e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
17e40 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
17e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e60 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
17e70 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62  able table = Tab
17e80 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74  leFromIntPtr(pVt
17e90 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
17ea0 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
17eb0 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 72 65 74 75 72 6e 20 53 61 76 65 70 6f 69 6e 74  return Savepoint
17ee0 28 74 61 62 6c 65 2c 20 69 53 61 76 65 70 6f 69  (table, iSavepoi
17ef0 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
17f00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17f10 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
17f20 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75  n e) /* NOTE: Mu
17f30 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f  st catch ALL. */
17f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f60 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
17f70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67  Vtab, e.ToString
17f80 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
17f90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17fa0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
17fb0 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
17fc0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
17fd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18020 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
18030 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
18040 65 20 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20  e xRelease(..   
18050 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
18060 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
18070 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
18080 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
18090 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
180a0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
180b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
180d0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
180e0 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
180f0 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
18100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18110 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
18120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18130 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18140 72 6e 20 52 65 6c 65 61 73 65 28 74 61 62 6c 65  rn Release(table
18150 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a  , iSavepoint);..
18160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18170 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
18180 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
18190 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
181a0 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
181b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
181c0 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
181d0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
181e0 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
181f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18200 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
18210 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
18220 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
18230 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18280 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18290 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
182a0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
182b0 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
182c0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
182d0 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
182e0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
182f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
18300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18310 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
18320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18330 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
18340 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
18350 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49  ble = TableFromI
18360 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d  ntPtr(pVtab);...
18370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18380 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
18390 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
183a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
183b0 52 6f 6c 6c 62 61 63 6b 54 6f 28 74 61 62 6c 65  RollbackTo(table
183c0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a  , iSavepoint);..
183d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
183e0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
183f0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
18400 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
18410 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
18420 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18430 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
18440 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
18450 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
18460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18470 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
18480 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
18490 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
184a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
184b0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
184c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
184d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18510 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
18520 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
18530 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  dule Members..  
18540 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
18550 6f 6c 20 64 65 63 6c 61 72 65 64 3b 0d 0a 20 20  ol declared;..  
18560 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
18570 74 75 61 6c 20 62 6f 6f 6c 20 44 65 63 6c 61 72  tual bool Declar
18580 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ed..        {.. 
18590 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
185a0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
185b0 3b 20 72 65 74 75 72 6e 20 64 65 63 6c 61 72 65  ; return declare
185c0 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
185d0 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20 7b    internal set {
185e0 20 64 65 63 6c 61 72 65 64 20 3d 20 76 61 6c 75   declared = valu
185f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
18600 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18650 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
18660 69 76 61 74 65 20 73 74 72 69 6e 67 20 6e 61 6d  ivate string nam
18670 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  e;..        publ
18680 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
18690 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  g Name..        
186a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
186b0 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
186c0 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 6d  ed(); return nam
186d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
186e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18730 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
18740 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51  blic abstract SQ
18750 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
18760 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
18770 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
18780 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d  ion connection,.
18790 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
187a0 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c  Ptr pClientData,
187b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
187c0 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73  ring[] arguments
187d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
187e0 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
187f0 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
18800 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
18810 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
18820 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
18830 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18880 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
18890 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
188a0 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63 74  rrorCode Connect
188b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
188c0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
188d0 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20  connection,..   
188e0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
188f0 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  pClientData,..  
18900 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
18910 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20  [] arguments,.. 
18920 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
18930 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
18940 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  e table,..      
18950 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
18960 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
18970 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
18980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
189d0 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74       public abst
189e0 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
189f0 43 6f 64 65 20 42 65 73 74 49 6e 64 65 78 28 0d  Code BestIndex(.
18a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
18a10 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
18a20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
18a30 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20      SQLiteIndex 
18a40 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  index..         
18a50 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18a60 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18aa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18ab0 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
18ac0 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
18ad0 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28 0d  ode Disconnect(.
18ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
18af0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
18b00 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  table..         
18b10 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18b20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18b70 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
18b80 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
18b90 6f 64 65 20 44 65 73 74 72 6f 79 28 0d 0a 20 20  ode Destroy(..  
18ba0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
18bb0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
18bc0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
18bd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
18be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18c30 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74   public abstract
18c40 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18c50 20 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20   Open(..        
18c60 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18c70 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
18c80 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
18c90 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
18ca0 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
18cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
18d20 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c  lic abstract SQL
18d30 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6c 6f  iteErrorCode Clo
18d40 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
18d50 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
18d60 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
18d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
18d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18dd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
18de0 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53  ublic abstract S
18df0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46  QLiteErrorCode F
18e00 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
18e10 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18e20 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
18e30 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
18e40 20 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65    int indexNumbe
18e50 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
18e60 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
18e70 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
18e80 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76   SQLiteValue[] v
18e90 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20  alues..         
18ea0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18eb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18f00 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
18f10 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
18f20 6f 64 65 20 4e 65 78 74 28 0d 0a 20 20 20 20 20  ode Next(..     
18f30 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
18f40 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
18f50 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
18f60 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
18f70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18fc0 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74       public abst
18fd0 72 61 63 74 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a  ract bool Eof(..
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
18ff0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
19000 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20  rsor cursor..   
19010 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
19020 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19070 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
19080 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
19090 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75 6d 6e  ErrorCode Column
190a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
190b0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
190c0 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 0d  eCursor cursor,.
190d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
190e0 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  iteContext conte
190f0 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
19100 20 69 6e 74 20 69 6e 64 65 78 0d 0a 20 20 20 20   int index..    
19110 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
19120 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19170 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
19180 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
19190 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d  rrorCode RowId(.
191a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
191b0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
191c0 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20  ursor cursor,.. 
191d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
191e0 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
191f0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
19200 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19250 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
19260 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
19270 72 6f 72 43 6f 64 65 20 55 70 64 61 74 65 28 0d  rorCode Update(.
19280 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
19290 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
192a0 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
192b0 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
192c0 5d 20 76 61 6c 75 65 73 2c 0d 0a 20 20 20 20 20  ] values,..     
192d0 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20         ref long 
192e0 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rowId..         
192f0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
19300 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19340 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19350 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
19360 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
19370 6f 64 65 20 42 65 67 69 6e 28 0d 0a 20 20 20 20  ode Begin(..    
19380 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
19390 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
193a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
193b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
193c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19400 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
19410 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53  ublic abstract S
19420 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
19430 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
19440 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
19450 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20  able table..    
19460 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
19470 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
194c0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
194d0 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
194e0 72 72 6f 72 43 6f 64 65 20 43 6f 6d 6d 69 74 28  rrorCode Commit(
194f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
19500 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
19510 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
19520 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
19530 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19570 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19580 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74       public abst
19590 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
195a0 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a  Code Rollback(..
195b0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
195c0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
195d0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
195e0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
195f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19640 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
19650 63 74 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63  ct bool FindFunc
19660 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
19670 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
19680 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
19690 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
196a0 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20  gumentCount,..  
196b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
196c0 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
196d0 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75      ref SQLiteFu
196e0 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c  nction function,
196f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
19700 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74  f IntPtr pClient
19710 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
19720 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
19730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19770 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19780 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
19790 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
197a0 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20  de Rename(..    
197b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
197c0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
197d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
197e0 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 0d 0a 20  tring newName.. 
197f0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
19860 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
19870 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65  teErrorCode Save
19880 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
19890 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
198a0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
198b0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
198c0 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
198d0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
198e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
198f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19930 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
19940 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
19950 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28 0d  orCode Release(.
19960 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
19970 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
19980 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
19990 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
199a0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
199b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
199c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19a10 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
19a20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
19a30 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
19a40 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
19a50 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
19a60 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
19a70 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 0d 0a 20  int savepoint.. 
19a80 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20             );.. 
19a90 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
19aa0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
19ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19af0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19b00 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
19b10 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ble Members..   
19b20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
19b30 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20   Dispose()..    
19b40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19b50 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
19b60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  ;..            G
19b70 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
19b80 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
19b90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
19ba0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19bb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19c00 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
19c10 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
19c20 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
19c30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
19c40 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
19c50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
19c60 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
19c70 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
19c80 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54          {..#if T
19c90 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
19ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
19cb0 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
19cc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
19ce0 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
19cf0 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
19d20 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d  eModule).Name);.
19d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19d40 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
19d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
19d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19da0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19db0 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
19dc0 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  l void Dispose(b
19dd0 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
19de0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19df0 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
19e00 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
19e10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19e20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70        //if (disp
19e30 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
19e40 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19e60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e80 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
19e90 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
19ea0 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
19eb0 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
19ec0 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
19ed0 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
19ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f10 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
19f20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
19f70 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
19f80 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
19f90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19fd0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
19fe0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
1a000 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a010 73 2e 73 71 6c 69 74 65 33 5f 64 69 73 70 6f 73  s.sqlite3_dispos
1a020 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20  e_module(..     
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 72 65 66 20 6e 61 74 69 76 65 4d 6f 64     ref nativeMod
1a050 75 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ule);..         
1a060 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a070 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1a080 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0b0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f            if (Lo
1a0f0 67 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20  gExceptions)..  
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
1a140 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
1a150 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
1a160 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
1a190 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
1a1a0 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1a1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74    "Caught except
1a1e0 69 6f 6e 20 69 6e 20 5c 22 44 69 73 70 6f 73 65  ion in \"Dispose
1a1f0 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
1a200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
1a230 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1a240 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1a270 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
1a280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a290 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a2e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
1a300 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
1a310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a320 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a330 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1a340 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1a350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a390 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1a3a0 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20   Destructor..   
1a3b0 20 20 20 20 20 7e 53 51 4c 69 74 65 4d 6f 64 75       ~SQLiteModu
1a3c0 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  le()..        {.
1a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
1a3e0 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
1a3f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a400 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1a410 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1a420 6f 6e 0d 0a 7d 0d 0a                             on..}..