System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8c09d4a10669d8a9c3deca640743e463aefdaf90:


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 53 51 4c 69 74 65 45 72 72 6f 72 43  ion(SQLiteErrorC
6b20: 6f 64 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20  ode.Error,..    
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73 69  "failed to persi
6b50: 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  st one or more v
6b60: 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20 20  alues");..      
6b70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6b80: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
6b90: 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78 4e  xNumber = indexN
6ba0: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
6bb0: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53 74      this.indexSt
6bc0: 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72 69  ring = indexStri
6bd0: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
6be0: 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 76   this.values = v
6bf0: 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  alues;..        
6c00: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6c10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6c20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6c70: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
6c80: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
6c90: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
6ca0: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
6cb0: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20  nativeHandle;.. 
6cc0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69         public vi
6cd0: 72 74 75 61 6c 20 49 6e 74 50 74 72 20 4e 61 74  rtual IntPtr Nat
6ce0: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20  iveHandle..     
6cf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6d00: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
6d10: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
6d20: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 20 7d 0d  nativeHandle; }.
6d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
6d40: 65 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61 74 69  ernal set { nati
6d50: 76 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c 75 65  veHandle = value
6d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
6d70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6d80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6de0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
6df0: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
6e00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
6e10: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
6e20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e30: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
6e40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6e50: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
6e60: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
6e70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
6e80: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6e90: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6ee0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6ef0: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
6f00: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
6f10: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
6f20: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
6f30: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
6f40: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
6f50: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
6f60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
6f70: 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
6f80: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  D..            i
6f90: 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
6fa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
6fc0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
6fd0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
6fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ff0: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
7000: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
7010: 72 73 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  rsor).Name);..  
7020: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
7030: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
7040: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  /....        pro
70a0: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
70b0: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
70c0: 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
70d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
70e0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
70f0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
7100: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7110: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
7120: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
7130: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
7140: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
7150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7170: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
7180: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
7190: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
71a0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
71b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
71c0: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7200: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7210: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7250: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
7260: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
7270: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
7280: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
72c0: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
72d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
72e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
72f0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7300: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
7360: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
7370: 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 56          ~SQLiteV
7380: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
7390: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r()..        {..
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
73b0: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
73c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
73d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
73e0: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
73f0: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
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 2f 2f  ////////////////
7430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7440: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
7450: 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76  ion ISQLiteNativ
7460: 65 48 61 6e 64 6c 65 20 49 6e 74 65 72 66 61 63  eHandle Interfac
7470: 65 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  e..    public in
7480: 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e  terface ISQLiteN
7490: 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20  ativeHandle..   
74a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
74b0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  tr NativeHandle 
74c0: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 7d 0d  { get; }..    }.
74d0: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
74e0: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f  ////////////////
7520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7530: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
7540: 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  n ISQLiteNativeM
7550: 6f 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65 0d  odule Interface.
7560: 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
7570: 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74  rface ISQLiteNat
7580: 69 76 65 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b  iveModule..    {
7590: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
75a0: 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74  ErrorCode xCreat
75b0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
75c0: 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
75d0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
75e0: 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
75f0: 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
7600: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
7610: 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  [] argv,..      
7620: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
7630: 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
7640: 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
7650: 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
7660: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
7670: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
76c0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
76d0: 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a  Code xConnect(..
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
76f0: 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20  tr pDb,..       
7700: 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78       IntPtr pAux
7710: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
7720: 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
7730: 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61        IntPtr[] a
7740: 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
7750: 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74    ref IntPtr pVt
7760: 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
7770: 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72   ref IntPtr pErr
7780: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
7790: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
77d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
77f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7800: 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
7810: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
7820: 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
7830: 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e 64       IntPtr pInd
7840: 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
7850: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
78b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
78c0: 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
78d0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
78e0: 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
78f0: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
7900: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7950: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7960: 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d  rCode xDestroy(.
7970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
7980: 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
7990: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
79a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
79f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7a00: 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a  rorCode xOpen(..
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
7a20: 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
7a30: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
7a40: 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20  r pCursor..     
7a50: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
7a60: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7ab0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7ac0: 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65 28 0d  rorCode xClose(.
7ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
7ae0: 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
7af0: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
7b00: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7b50: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7b60: 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74 65  ErrorCode xFilte
7b70: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
7b80: 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
7b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
7ba0: 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20   idxNum,..      
7bb0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64 78        IntPtr idx
7bc0: 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Str,..          
7bd0: 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
7be0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b           IntPtr[
7bf0: 5d 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20  ] argv..        
7c00: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
7c10: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7c60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7c70: 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20  Code xNext(..   
7c80: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
7c90: 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
7ca0: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
7cb0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7d00: 20 20 20 20 20 20 69 6e 74 20 78 45 6f 66 28 0d        int xEof(.
7d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
7d20: 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
7d30: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
7d40: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7d90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7da0: 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d  ErrorCode xColum
7db0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
7dc0: 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d  IntPtr pCursor,.
7dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
7de0: 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20  Ptr pContext,.. 
7df0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
7e00: 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
7e10: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7e70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7e80: 64 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20 20  de xRowId(..    
7e90: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
7ea0: 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
7eb0: 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f       ref long ro
7ec0: 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  wId..           
7ed0: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7f30: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7f40: 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  e xUpdate(..    
7f50: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
7f60: 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
7f70: 20 20 20 69 6e 74 20 6e 44 61 74 61 2c 0d 0a 20     int nData,.. 
7f80: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
7f90: 72 20 61 70 44 61 74 61 2c 0d 0a 20 20 20 20 20  r apData,..     
7fa0: 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20         ref long 
7fb0: 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rowId..         
7fc0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
7fd0: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8020: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8030: 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20  ode xBegin(..   
8040: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
8050: 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
8060: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
8070: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
80c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
80d0: 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20  ode xSync(..    
80e0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
80f0: 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
8100: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8160: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8170: 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20  de xCommit(..   
8180: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
8190: 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
81a0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
81b0: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8200: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8210: 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ode xRollback(..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
8230: 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
8240: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
8250: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
82a0: 20 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e 64         int xFind
82b0: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
82c0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
82d0: 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
82e0: 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20 20    int nArg,..   
82f0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
8300: 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  zName,..        
8310: 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43 61      ref SQLiteCa
8320: 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
8330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8340: 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74  f IntPtr pClient
8350: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
8360: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
83c0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
83d0: 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20  de xRename(..   
83e0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
83f0: 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
8400: 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d      IntPtr zNew.
8410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
8420: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
8480: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53  LiteErrorCode xS
8490: 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20  avepoint(..     
84a0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
84b0: 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
84c0: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
84d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
84e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
8540: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
8550: 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20  Release(..      
8560: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
8570: 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
8580: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
8590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
85a0: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
8600: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52  LiteErrorCode xR
8610: 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20  ollbackTo(..    
8620: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
8630: 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
8640: 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
8650: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
8660: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
8670: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
86d0: 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
86e0: 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20  teManagedModule 
86f0: 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 70  Interface..    p
8700: 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20  ublic interface 
8710: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
8720: 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dule..    {..   
8730: 20 20 20 20 20 62 6f 6f 6c 20 44 65 63 6c 61 72       bool Declar
8740: 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  ed { get; }..   
8750: 20 20 20 20 20 73 74 72 69 6e 67 20 4e 61 6d 65       string Name
8760: 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20   { get; }....   
8770: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
87c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
87d0: 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
87e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
87f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
8800: 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e  nnection,  /* in
8810: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
8820: 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
8830: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ata,           /
8840: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
8850: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
8860: 67 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20  guments,        
8870: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
8880: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
8890: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
88a0: 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f  table, /* out */
88b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
88c0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
88e0: 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
88f0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
8900: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8950: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8960: 6f 64 65 20 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  ode Connect(..  
8970: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8980: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
8990: 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a 2f  ction,  /* in */
89a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
89b0: 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
89c0: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ,           /* i
89d0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
89e0: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
89f0: 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20 20 20  ents,           
8a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
8a10: 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
8a20: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
8a30: 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20  le, /* out */.. 
8a40: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
8a50: 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
8a60: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20           /* out 
8a70: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
8a80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8ae0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8af0: 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20   BestIndex(..   
8b00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
8b10: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
8b20: 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
8b30: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49           SQLiteI
8b40: 6e 64 65 78 20 69 6e 64 65 78 20 20 20 20 20 20  ndex index      
8b50: 20 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f     /* in, out */
8b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
8b70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
8bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
8bd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
8be0: 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  isconnect(..    
8bf0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
8c00: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
8c10: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
8c20: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
8c30: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8c80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8c90: 72 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79 28  rorCode Destroy(
8ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
8cb0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
8cc0: 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
8ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
8d40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70  LiteErrorCode Op
8d50: 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  en(..           
8d60: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
8d70: 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 20 20  ble table,      
8d80: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
8d90: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
8da0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
8db0: 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 2f  eCursor cursor /
8dc0: 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
8dd0: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
8de0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8e30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8e40: 6f 72 43 6f 64 65 20 43 6c 6f 73 65 28 0d 0a 20  orCode Close(.. 
8e50: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8e60: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
8e70: 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e  sor cursor /* in
8e80: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
8e90: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8ef0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8f00: 65 20 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20  e Filter(..     
8f10: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
8f20: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
8f30: 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f  cursor, /* in */
8f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
8f50: 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 20 20  t indexNumber,  
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f70: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
8f80: 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 64 65       string inde
8f90: 78 53 74 72 69 6e 67 2c 20 20 20 20 20 20 20 20  xString,        
8fa0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8fc0: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8fe0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
8ff0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
9000: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9040: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9050: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9060: 6f 64 65 20 4e 65 78 74 28 0d 0a 20 20 20 20 20  ode Next(..     
9070: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
9080: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
9090: 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d  cursor /* in */.
90a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
90b0: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f  //....        bo
9110: 6f 6c 20 45 6f 66 28 0d 0a 20 20 20 20 20 20 20  ol Eof(..       
9120: 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
9130: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
9140: 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  rsor /* in */.. 
9150: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
9160: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
91a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
91c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c 75  teErrorCode Colu
91d0: 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
91e0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
91f0: 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
9200: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
9210: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
9220: 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20 20  ntext context,  
9230: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
9240: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
9250: 6e 74 20 69 6e 64 65 78 20 20 20 20 20 20 20 20  nt index        
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9270: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
9280: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
9290: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
92e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
92f0: 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d 0a 20  orCode RowId(.. 
9300: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
9310: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
9320: 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69  sor cursor, /* i
9330: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
9340: 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
9370: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
9380: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
93d0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
93e0: 65 45 72 72 6f 72 43 6f 64 65 20 55 70 64 61 74  eErrorCode Updat
93f0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
9400: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
9410: 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
9420: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9430: 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61  SQLiteValue[] va
9440: 6c 75 65 73 2c 20 20 20 20 20 2f 2a 20 69 6e 20  lues,     /* in 
9450: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9460: 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 20 20  ref long rowId  
9470: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
9480: 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
9490: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
94a0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
94f0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9500: 72 43 6f 64 65 20 42 65 67 69 6e 28 0d 0a 20 20  rCode Begin(..  
9510: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9520: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9530: 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  le /* in */..   
9540: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
9550: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
95a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
95b0: 45 72 72 6f 72 43 6f 64 65 20 53 79 6e 63 28 0d  ErrorCode Sync(.
95c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
95d0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
95e0: 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  table /* in */..
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
9600: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
9660: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6d  iteErrorCode Com
9670: 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mit(..          
9680: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
9690: 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
96a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
96b0: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9710: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9720: 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  e Rollback(..   
9730: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
9740: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
9750: 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  e /* in */..    
9760: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
9770: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
97c0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 46 69  .        bool Fi
97d0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
97e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
97f0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
9800: 65 2c 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  e,    /* in */..
9810: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9820: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 20 20  argumentCount,  
9830: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
9840: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
9850: 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20  tring name,     
9860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
9870: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
9880: 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63    ref SQLiteFunc
9890: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 2f  tion function, /
98a0: 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
98b0: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
98c0: 20 70 43 6c 69 65 6e 74 44 61 74 61 20 20 20 20   pClientData    
98d0: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
98e0: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
98f0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9940: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
9950: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d  eErrorCode Renam
9960: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
9970: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
9980: 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
9990: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
99a0: 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 20  string newName  
99b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
99c0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
99d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9a30: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9a40: 20 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20   Savepoint(..   
9a50: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
9a60: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
9a70: 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  e, /* in */..   
9a80: 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61 76           int sav
9a90: 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20 20  epoint          
9aa0: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
9ab0: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
9ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9b10: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
9b20: 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
9b30: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
9b40: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
9b50: 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
9b60: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9b70: 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20  int savepoint   
9b80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
9b90: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
9ba0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9c00: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9c10: 20 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20   RollbackTo(..  
9c20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9c30: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9c40: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
9c50: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61            int sa
9c60: 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20  vepoint         
9c70: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
9c80: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20            );..  
9c90: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
9ca0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cf0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
9d00: 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 65 6d 6f  egion SQLiteMemo
9d10: 72 79 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  ry Static Class.
9d20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
9d30: 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  atic class SQLit
9d40: 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 7b 0d 0a  eMemory..    {..
9d50: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
9d60: 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 23 69  Private Data..#i
9d70: 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  f TRACK_MEMORY_B
9d80: 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 70 72  YTES..        pr
9d90: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
9da0: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
9db0: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
9dc0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9e10: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
9e20: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 62 79  te static int by
9e30: 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 20  tesAllocated;.. 
9e40: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
9e50: 74 61 74 69 63 20 69 6e 74 20 6d 61 78 69 6d 75  tatic int maximu
9e60: 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b  mBytesAllocated;
9e70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
9e80: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
9e90: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9ee0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
9ef0: 6f 6e 20 4d 65 6d 6f 72 79 20 41 6c 6c 6f 63 61  on Memory Alloca
9f00: 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74 68  tion Helper Meth
9f10: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
9f20: 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
9f30: 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e 74 20 73  r Allocate(int s
9f40: 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ize)..        {.
9f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
9f60: 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d 20 55 6e  Ptr pMemory = Un
9f70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9f80: 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  s.sqlite3_malloc
9f90: 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69 66 20 54  (size);....#if T
9fa0: 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
9fb0: 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  S..            i
9fc0: 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49 6e  f (pMemory != In
9fd0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
9fe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9ff0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 62             int b
a000: 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65 28  lockSize = Size(
a010: 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  pMemory);....   
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a030: 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29 0d  (blockSize > 0).
a040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a060: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
a070: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0a0: 20 20 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c          bytesAll
a0b0: 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f 63 6b 53  ocated += blockS
a0c0: 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 69 66 20 28 62 79 74 65 73 41 6c 6c 6f 63 61 74  if (bytesAllocat
a0f0: 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42 79 74 65  ed > maximumByte
a100: 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a 20 20 20  sAllocated)..   
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a120: 20 20 20 20 20 20 20 20 20 6d 61 78 69 6d 75 6d           maximum
a130: 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 3d  BytesAllocated =
a140: 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b   bytesAllocated;
a150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a160: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a170: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a180: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
a190: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
a1a0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f 72 79 3b   return pMemory;
a1b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a1c0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a210: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a220: 20 73 74 61 74 69 63 20 69 6e 74 20 53 69 7a 65   static int Size
a230: 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 29  (IntPtr pMemory)
a240: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
a250: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a260: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
a270: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
a280: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a290: 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e  3_malloc_size_in
a2a0: 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79 29 3b 0d  terop(pMemory);.
a2b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
a2c0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
a2d0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
a2e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
a320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a330: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
a340: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
a350: 64 20 46 72 65 65 28 49 6e 74 50 74 72 20 70 4d  d Free(IntPtr pM
a360: 65 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20 20  emory)..        
a370: 7b 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d  {..#if TRACK_MEM
a380: 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20 20  ORY_BYTES..     
a390: 20 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d 6f         if (pMemo
a3a0: 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ry != IntPtr.Zer
a3b0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
a3c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a3d0: 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65     int blockSize
a3e0: 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29   = Size(pMemory)
a3f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a400: 20 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53 69       if (blockSi
a410: 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  ze > 0)..       
a420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a460: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d  bytesAllocated -
a490: 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20  = blockSize;..  
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a4c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a4d0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
a4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
a4f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a500: 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 4d  .sqlite3_free(pM
a510: 65 6d 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  emory);..       
a520: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a530: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
a540: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a550: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
a5b0: 53 51 4c 69 74 65 53 74 72 69 6e 67 20 53 74 61  SQLiteString Sta
a5c0: 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20 69  tic Class..    i
a5d0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
a5e0: 6c 61 73 73 20 53 51 4c 69 74 65 53 74 72 69 6e  lass SQLiteStrin
a5f0: 67 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  g..    {..      
a600: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
a610: 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  e Constants..   
a620: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
a630: 74 69 63 20 69 6e 74 20 54 68 69 72 74 79 42 69  tic int ThirtyBi
a640: 74 73 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b  ts = 0x3fffffff;
a650: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
a660: 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
a670: 79 20 45 6e 63 6f 64 69 6e 67 20 55 74 66 38 45  y Encoding Utf8E
a680: 6e 63 6f 64 69 6e 67 20 3d 20 45 6e 63 6f 64 69  ncoding = Encodi
a690: 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20  ng.UTF8;..      
a6a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a6b0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a700: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a710: 6f 6e 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e  on UTF-8 Encodin
a720: 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73  g Helper Methods
a730: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a740: 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47   static byte[] G
a750: 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53  etUtf8BytesFromS
a760: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
a770: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
a780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
a790: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a7a0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
a7b0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a7d0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
a7e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
a7f0: 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42  tf8Encoding.GetB
a800: 79 74 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20  ytes(value);..  
a810: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a820: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a870: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
a880: 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
a890: 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
a8a0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
a8b0: 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20  byte[] bytes..  
a8c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a8d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a8e0: 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d      if (bytes ==
a8f0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a900: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
a910: 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ull;....#if !PLA
a920: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
a930: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
a940: 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38 45      return Utf8E
a950: 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e  ncoding.GetStrin
a960: 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65  g(bytes);..#else
a970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a980: 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
a990: 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
a9a0: 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67  s, 0, bytes.Leng
a9b0: 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  th);..#endif..  
a9c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a9d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a9e0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
aa30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
aa40: 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48  n UTF-8 String H
aa50: 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
aa60: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
aa70: 61 74 69 63 20 69 6e 74 20 50 72 6f 62 65 46 6f  atic int ProbeFo
aa80: 72 55 74 66 38 42 79 74 65 4c 65 6e 67 74 68 28  rUtf8ByteLength(
aa90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
aaa0: 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20 20  tPtr pValue,..  
aab0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69            int li
aac0: 6d 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mit..           
aad0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
aae0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
aaf0: 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 0d 0a 20 20  ength = 0;....  
ab00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
ab10: 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
ab20: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
ab30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ab40: 20 20 20 20 20 64 6f 0d 0a 20 20 20 20 20 20 20       do..       
ab50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 69 66 20 28 4d 61 72 73 68 61 6c 2e 52 65 61 64  if (Marshal.Read
ab80: 42 79 74 65 28 70 56 61 6c 75 65 2c 20 6c 65 6e  Byte(pValue, len
ab90: 67 74 68 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  gth) == 0)..    
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20      break;....  
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abd0: 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 3d 20    if (length >= 
abe0: 6c 69 6d 69 74 29 0d 0a 20 20 20 20 20 20 20 20  limit)..        
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  break;....      
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
ac20: 6e 67 74 68 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ngth++;..       
ac30: 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65           } while
ac40: 20 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20   (true);..      
ac50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ac60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 65         return le
ac70: 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ngth;..        }
ac80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
ace0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
acf0: 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d 55 74  ing StringFromUt
ad00: 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  f8IntPtr(..     
ad10: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
ad20: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
ad30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ad50: 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d 55 74 66  rn StringFromUtf
ad60: 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c 0d  8IntPtr(pValue,.
ad70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad80: 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79 74   ProbeForUtf8Byt
ad90: 65 4c 65 6e 67 74 68 28 70 56 61 6c 75 65 2c 20  eLength(pValue, 
ada0: 54 68 69 72 74 79 42 69 74 73 29 29 3b 0d 0a 20  ThirtyBits));.. 
adb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
adc0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ae10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
ae20: 61 74 69 63 20 73 74 72 69 6e 67 20 53 74 72 69  atic string Stri
ae30: 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72  ngFromUtf8IntPtr
ae40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
ae50: 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20  ntPtr pValue,.. 
ae60: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
ae70: 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20  ength..         
ae80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
ae90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
aea0: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
aeb0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
aec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
aed0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
aee0: 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20       if (length 
aef0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
af00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
af10: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65       byte[] byte
af20: 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e  s = new byte[len
af30: 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
af40: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
af50: 2e 43 6f 70 79 28 70 56 61 6c 75 65 2c 20 62 79  .Copy(pValue, by
af60: 74 65 73 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b  tes, 0, length);
af70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
af80: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 74      return GetSt
af90: 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
afa0: 73 28 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  s(bytes);..     
afb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
afc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
afd0: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
afe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
aff0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b040: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
b050: 74 69 63 20 49 6e 74 50 74 72 20 55 74 66 38 49  tic IntPtr Utf8I
b060: 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
b070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
b080: 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20  ring value..    
b090: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b0a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b0b0: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
b0c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b0d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
b0e0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
b0f0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
b100: 72 65 73 75 6c 74 20 3d 20 49 6e 74 50 74 72 2e  result = IntPtr.
b110: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
b120: 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20     byte[] bytes 
b130: 3d 20 47 65 74 55 74 66 38 42 79 74 65 73 46 72  = GetUtf8BytesFr
b140: 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b  omString(value);
b150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b160: 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c  if (bytes == nul
b170: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
b180: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
b190: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
b1a0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
b1b0: 68 20 3d 20 62 79 74 65 73 2e 4c 65 6e 67 74 68  h = bytes.Length
b1c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b1d0: 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65   result = SQLite
b1e0: 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
b1f0: 6c 65 6e 67 74 68 20 2b 20 31 29 3b 0d 0a 0d 0a  length + 1);....
b200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b210: 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74 72  result == IntPtr
b220: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
b230: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
b240: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
b250: 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
b260: 61 6c 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30  al.Copy(bytes, 0
b270: 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68  , result, length
b280: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b290: 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 42 79 74  Marshal.WriteByt
b2a0: 65 28 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74 68  e(result, length
b2b0: 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , 0);....       
b2c0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
b2d0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
b2e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b2f0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f  ////////////////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b350: 20 23 72 65 67 69 6f 6e 20 55 54 46 2d 38 20 53   #region UTF-8 S
b360: 74 72 69 6e 67 20 41 72 72 61 79 20 48 65 6c 70  tring Array Help
b370: 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
b380: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b390: 63 20 73 74 72 69 6e 67 5b 5d 20 53 74 72 69 6e  c string[] Strin
b3a0: 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38 49 6e  gArrayFromUtf8In
b3b0: 74 50 74 72 41 72 72 61 79 28 0d 0a 20 20 20 20  tPtrArray(..    
b3c0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d          IntPtr[]
b3d0: 20 70 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20   pValues..      
b3e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b3f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b400: 69 66 20 28 70 56 61 6c 75 65 73 20 3d 3d 20 6e  if (pValues == n
b410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b420: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
b430: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
b440: 20 20 73 74 72 69 6e 67 5b 5d 20 72 65 73 75 6c    string[] resul
b450: 74 20 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b 70  t = new string[p
b460: 56 61 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d  Values.Length];.
b470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
b480: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
b490: 30 3b 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c  0; index < resul
b4a0: 74 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b  t.Length; index+
b4b0: 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
b4c0: 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78      result[index
b4d0: 5d 20 3d 20 53 74 72 69 6e 67 46 72 6f 6d 55 74  ] = StringFromUt
b4e0: 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65 73  f8IntPtr(pValues
b4f0: 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20 20  [index]);....   
b500: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b510: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
b520: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b580: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49   public static I
b590: 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e 74 50  ntPtr[] Utf8IntP
b5a0: 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72 69 6e  trArrayFromStrin
b5b0: 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20 20 20  gArray(..       
b5c0: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61       string[] va
b5d0: 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lues..          
b5e0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b600: 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  values == null).
b610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b620: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
b630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
b640: 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  Ptr[] result = n
b650: 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75 65 73  ew IntPtr[values
b660: 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20  .Length];....   
b670: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
b680: 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
b690: 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67  ex < result.Leng
b6a0: 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b6c0: 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 55 74  sult[index] = Ut
b6d0: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
b6e0: 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65 78 5d  ng(values[index]
b6f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b700: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
b710: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
b720: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b730: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
b740: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b7a0: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d   #region SQLiteM
b7b0: 61 72 73 68 61 6c 20 53 74 61 74 69 63 20 43 6c  arshal Static Cl
b7c0: 61 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ass..    interna
b7d0: 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
b7e0: 51 4c 69 74 65 4d 61 72 73 68 61 6c 0d 0a 20 20  QLiteMarshal..  
b7f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
b800: 67 69 6f 6e 20 49 6e 74 50 74 72 20 48 65 6c 70  gion IntPtr Help
b810: 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
b820: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b830: 63 20 49 6e 74 50 74 72 20 49 6e 74 50 74 72 46  c IntPtr IntPtrF
b840: 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20  orOffset(..     
b850: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f         IntPtr po
b860: 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  inter,..        
b870: 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a      int offset..
b880: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b890: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b8a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
b8b0: 20 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72 2e   IntPtr(pointer.
b8c0: 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66 66 73  ToInt64() + offs
b8d0: 65 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  et);..        }.
b8e0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
b8f0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b940: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b950: 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61    #region Marsha
b960: 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20 4d 65  l Read Helper Me
b970: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70  thods..        p
b980: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
b990: 20 52 65 61 64 49 6e 74 33 32 28 0d 0a 20 20 20   ReadInt32(..   
b9a0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
b9b0: 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
b9c0: 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
b9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
b9e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
b9f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ba00: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ba10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
ba20: 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32  arshal.ReadInt32
ba30: 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
ba40: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
ba50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
ba60: 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32 28  rshal.ReadInt32(
ba70: 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28  IntPtrForOffset(
ba80: 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29  pointer, offset)
ba90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
baa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bab0: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bb00: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bb10: 63 20 64 6f 75 62 6c 65 20 52 65 61 64 44 6f 75  c double ReadDou
bb20: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
bb30: 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72    IntPtr pointer
bb40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
bb50: 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20  nt offset..     
bb60: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
bb70: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
bb80: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
bb90: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
bba0: 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76 65   return BitConve
bbb0: 72 74 65 72 2e 49 6e 74 36 34 42 69 74 73 54 6f  rter.Int64BitsTo
bbc0: 44 6f 75 62 6c 65 28 4d 61 72 73 68 61 6c 2e 52  Double(Marshal.R
bbd0: 65 61 64 49 6e 74 36 34 28 0d 0a 20 20 20 20 20  eadInt64(..     
bbe0: 20 20 20 20 20 20 20 20 20 20 20 70 6f 69 6e 74             point
bbf0: 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23  er, offset));..#
bc00: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
bc10: 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76    return BitConv
bc20: 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c 65 28 42  erter.ToDouble(B
bc30: 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  itConverter.GetB
bc40: 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ytes(..         
bc50: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 52         Marshal.R
bc60: 65 61 64 49 6e 74 36 34 28 49 6e 74 50 74 72 46  eadInt64(IntPtrF
bc70: 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
bc80: 2c 20 6f 66 66 73 65 74 29 29 29 2c 20 30 29 3b  , offset))), 0);
bc90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
bca0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
bd00: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bd10: 49 6e 74 50 74 72 20 52 65 61 64 49 6e 74 50 74  IntPtr ReadIntPt
bd20: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
bd30: 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d  IntPtr pointer,.
bd40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
bd50: 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20 20   offset..       
bd60: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bd70: 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
bd80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
bd90: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  K..            r
bda0: 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65  eturn Marshal.Re
bdb0: 61 64 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72  adIntPtr(pointer
bdc0: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c 73  , offset);..#els
bdd0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
bde0: 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65  eturn Marshal.Re
bdf0: 61 64 49 6e 74 50 74 72 28 49 6e 74 50 74 72 46  adIntPtr(IntPtrF
be00: 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65 72  orOffset(pointer
be10: 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65 6e  , offset));..#en
be20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
be30: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
be40: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
be50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bea0: 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61 6c   #region Marshal
beb0: 20 57 72 69 74 65 20 48 65 6c 70 65 72 20 4d 65   Write Helper Me
bec0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70  thods..        p
bed0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
bee0: 64 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a 20  d WriteInt32(.. 
bef0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
bf00: 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20  r pointer,..    
bf10: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
bf20: 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et,..           
bf30: 20 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20 20   int value..    
bf40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
bf50: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
bf60: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
bf70: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
bf80: 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49    Marshal.WriteI
bf90: 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66  nt32(pointer, of
bfa0: 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  fset, value);..#
bfb0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
bfc0: 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49    Marshal.WriteI
bfd0: 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66  nt32(IntPtrForOf
bfe0: 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66  fset(pointer, of
bff0: 66 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a  fset), value);..
c000: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
c010: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
c020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c070: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
c080: 69 64 20 57 72 69 74 65 44 6f 75 62 6c 65 28 0d  id WriteDouble(.
c090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
c0a0: 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
c0b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
c0c0: 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  fset,..         
c0d0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 0d     double value.
c0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
c0f0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
c100: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
c110: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
c120: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
c130: 72 69 74 65 49 6e 74 36 34 28 70 6f 69 6e 74 65  riteInt64(pointe
c140: 72 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20  r, offset,..    
c150: 20 20 20 20 20 20 20 20 20 20 20 20 42 69 74 43              BitC
c160: 6f 6e 76 65 72 74 65 72 2e 44 6f 75 62 6c 65 54  onverter.DoubleT
c170: 6f 49 6e 74 36 34 42 69 74 73 28 76 61 6c 75 65  oInt64Bits(value
c180: 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ));..#else..    
c190: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
c1a0: 57 72 69 74 65 49 6e 74 36 34 28 49 6e 74 50 74  WriteInt64(IntPt
c1b0: 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74  rForOffset(point
c1c0: 65 72 2c 20 6f 66 66 73 65 74 29 2c 0d 0a 20 20  er, offset),..  
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69                Bi
c1e0: 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 49 6e 74  tConverter.ToInt
c1f0: 36 34 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e  64(BitConverter.
c200: 47 65 74 42 79 74 65 73 28 76 61 6c 75 65 29 2c  GetBytes(value),
c210: 20 30 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   0));..#endif.. 
c220: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c230: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c280: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c290: 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 49  atic void WriteI
c2a0: 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ntPtr(..        
c2b0: 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
c2c0: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
c2d0: 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
c2e0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
c2f0: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
c300: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
c310: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
c320: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
c330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
c340: 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
c350: 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  r(pointer, offse
c360: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  t, value);..#els
c370: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  e..            M
c380: 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50  arshal.WriteIntP
c390: 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  tr(IntPtrForOffs
c3a0: 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  et(pointer, offs
c3b0: 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  et), value);..#e
c3c0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
c3d0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
c3e0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c430: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c440: 20 20 23 72 65 67 69 6f 6e 20 42 79 74 65 20 41    #region Byte A
c450: 72 72 61 79 20 48 65 6c 70 65 72 20 4d 65 74 68  rray Helper Meth
c460: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ods..        pub
c470: 6c 69 63 20 73 74 61 74 69 63 20 62 79 74 65 5b  lic static byte[
c480: 5d 20 42 79 74 65 73 46 72 6f 6d 49 6e 74 50 74  ] BytesFromIntPt
c490: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
c4a0: 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a  IntPtr pValue,..
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
c4c0: 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20  length..        
c4d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
c4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
c4f0: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
c500: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
c510: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c520: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c530: 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
c540: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
c550: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
c560: 65 77 20 62 79 74 65 5b 30 5d 3b 0d 0a 0d 0a 20  ew byte[0];.... 
c570: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
c580: 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 62  ] result = new b
c590: 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a  yte[length];....
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
c5b0: 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65 2c  hal.Copy(pValue,
c5c0: 20 72 65 73 75 6c 74 2c 20 30 2c 20 6c 65 6e 67   result, 0, leng
c5d0: 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
c5e0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
c5f0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  t;..        }...
c600: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
c660: 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72  ic static IntPtr
c670: 20 42 79 74 65 73 54 6f 49 6e 74 50 74 72 28 0d   BytesToIntPtr(.
c680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
c690: 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  e[] value..     
c6a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
c6b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c6c0: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
c6d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c6e0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
c6f0: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
c700: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
c710: 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65 6e 67 74  th = value.Lengt
c720: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
c730: 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20    if (length == 
c740: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
c750: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
c760: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
c770: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72 65         IntPtr re
c780: 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65 6d  sult = SQLiteMem
c790: 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65 6e  ory.Allocate(len
c7a0: 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
c7b0: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20       if (result 
c7c0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c7e0: 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
c7f0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
c800: 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
c810: 28 76 61 6c 75 65 2c 20 30 2c 20 72 65 73 75 6c  (value, 0, resul
c820: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
c830: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c840: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
c850: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
c860: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
c870: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c8c0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
c8d0: 51 4c 69 74 65 56 61 6c 75 65 20 48 65 6c 70 65  QLiteValue Helpe
c8e0: 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
c8f0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c900: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 56   SQLiteValue[] V
c910: 61 6c 75 65 41 72 72 61 79 46 72 6f 6d 53 69 7a  alueArrayFromSiz
c920: 65 41 6e 64 49 6e 74 50 74 72 28 0d 0a 20 20 20  eAndIntPtr(..   
c930: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 44 61           int nDa
c940: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
c950: 20 49 6e 74 50 74 72 20 61 70 44 61 74 61 0d 0a   IntPtr apData..
c960: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c980: 20 20 20 20 20 20 69 66 20 28 6e 44 61 74 61 20        if (nData 
c990: 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  < 0)..          
c9a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
c9b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
c9c0: 20 20 69 66 20 28 61 70 44 61 74 61 20 3d 3d 20    if (apData == 
c9d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c9f0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
ca00: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
ca10: 56 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d  Value[] result =
ca20: 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65   new SQLiteValue
ca30: 5b 6e 44 61 74 61 5d 3b 0d 0a 0d 0a 20 20 20 20  [nData];....    
ca40: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
ca50: 20 69 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73   index = 0, offs
ca60: 65 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  et = 0;..       
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
ca80: 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67  ex < result.Leng
ca90: 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th;..           
caa0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b           index++
cab0: 2c 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50  , offset += IntP
cac0: 74 72 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20  tr.Size)..      
cad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cae0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
caf0: 70 44 61 74 61 20 3d 20 52 65 61 64 49 6e 74 50  pData = ReadIntP
cb00: 74 72 28 61 70 44 61 74 61 2c 20 6f 66 66 73 65  tr(apData, offse
cb10: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
cb20: 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69 6e         result[in
cb30: 64 65 78 5d 20 3d 20 28 70 44 61 74 61 20 21 3d  dex] = (pData !=
cb40: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d   IntPtr.Zero) ?.
cb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb60: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 56       new SQLiteV
cb70: 61 6c 75 65 28 70 44 61 74 61 29 20 3a 20 6e 75  alue(pData) : nu
cb80: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
cb90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
cba0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
cbb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
cbc0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
cc10: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
cc20: 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 56 61   static SQLiteVa
cc30: 6c 75 65 5b 5d 20 56 61 6c 75 65 41 72 72 61 79  lue[] ValueArray
cc40: 46 72 6f 6d 49 6e 74 50 74 72 41 72 72 61 79 28  FromIntPtrArray(
cc50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
cc60: 74 50 74 72 5b 5d 20 76 61 6c 75 65 73 0d 0a 20  tPtr[] values.. 
cc70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
cc80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cc90: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 20       if (values 
cca0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
ccb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ccc0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
ccd0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75        SQLiteValu
cce0: 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  e[] result = new
ccf0: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 76 61 6c   SQLiteValue[val
cd00: 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a  ues.Length];....
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
cd20: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
cd30: 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c  index < result.L
cd40: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
cd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd60: 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d   result[index] =
cd70: 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65   new SQLiteValue
cd80: 28 76 61 6c 75 65 73 5b 69 6e 64 65 78 5d 29 3b  (values[index]);
cd90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cda0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
cdb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cdc0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
cdd0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
ce10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
ce30: 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78 20  ion SQLiteIndex 
ce40: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
ce50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ce60: 74 61 74 69 63 20 76 6f 69 64 20 49 6e 64 65 78  tatic void Index
ce70: 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
ce80: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
ce90: 70 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  pIndex,..       
cea0: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 49       ref SQLiteI
ceb0: 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20  ndex index..    
cec0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
ced0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cee0: 20 20 69 66 20 28 70 49 6e 64 65 78 20 3d 3d 20    if (pIndex == 
cef0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cf10: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cf20: 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 20       int offset 
cf30: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
cf40: 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61      int nConstra
cf50: 69 6e 74 20 3d 20 52 65 61 64 49 6e 74 33 32 28  int = ReadInt32(
cf60: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
cf70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cf80: 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66  offset += sizeof
cf90: 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (int);....      
cfa0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
cfb0: 6e 73 74 72 61 69 6e 74 20 3d 20 52 65 61 64 49  nstraint = ReadI
cfc0: 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
cfd0: 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
cfe0: 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
cff0: 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a  IntPtr.Size;....
d000: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d010: 6e 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64 49  nOrderBy = ReadI
d020: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
d030: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
d040: 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65 77       index = new
d050: 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43 6f   SQLiteIndex(nCo
d060: 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72  nstraint, nOrder
d070: 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  By);....        
d080: 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69      offset += si
d090: 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20  zeof(int);....  
d0a0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
d0b0: 20 70 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64   pOrderBy = Read
d0c0: 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
d0d0: 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
d0e0: 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
d0f0: 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d   IntPtr.Size;...
d100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
d110: 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74 55  Ptr pConstraintU
d120: 73 61 67 65 20 3d 20 52 65 61 64 49 6e 74 50 74  sage = ReadIntPt
d130: 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  r(pIndex, offset
d140: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d150: 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50    offset += IntP
d160: 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20  tr.Size;....    
d170: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75          index.Ou
d180: 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65  tputs.IndexNumbe
d190: 72 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  r = ReadInt32(pI
d1a0: 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
d1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
d1c0: 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
d1d0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
d1e0: 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
d1f0: 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 20 3d 20  s.IndexString = 
d200: 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72  SQLiteString.Str
d210: 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
d220: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
d230: 20 20 20 20 49 6e 74 50 74 72 46 6f 72 4f 66 66      IntPtrForOff
d240: 73 65 74 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  set(pIndex, offs
d250: 65 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et));....       
d260: 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49       offset += I
d270: 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20  ntPtr.Size;.... 
d280: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
d290: 2e 4f 75 74 70 75 74 73 2e 4e 65 65 64 54 6f 46  .Outputs.NeedToF
d2a0: 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20 3d  reeIndexString =
d2b0: 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65   ReadInt32(pInde
d2c0: 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
d2d0: 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
d2e0: 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29  t += sizeof(int)
d2f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d300: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 4f   index.Outputs.O
d310: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 3d  rderByConsumed =
d320: 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65   ReadInt32(pInde
d330: 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
d340: 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
d350: 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29  t += sizeof(int)
d360: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d370: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 45   index.Outputs.E
d380: 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 52  stimatedCost = R
d390: 65 61 64 44 6f 75 62 6c 65 28 70 49 6e 64 65 78  eadDouble(pIndex
d3a0: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
d3b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69            int si
d3c0: 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79  zeOfConstraintTy
d3d0: 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a  pe = Marshal.Siz
d3e0: 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20  eOf(typeof(..   
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
d400: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d410: 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
d420: 6f 6e 73 74 72 61 69 6e 74 29 29 3b 0d 0a 0d 0a  onstraint));....
d430: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
d440: 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74  (int iConstraint
d450: 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e   = 0; iConstrain
d460: 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b  t < nConstraint;
d470: 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d   iConstraint++).
d480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d4b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
d4c0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  x_constraint con
d4d0: 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20 20  straint =..     
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
d4f0: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
d500: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
d510: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 28  ndex_constraint(
d520: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d530: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74        Marshal.Pt
d540: 72 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e 74  rToStructure(Int
d550: 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f  PtrForOffset(pCo
d560: 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20  nstraint,..     
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d580: 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69 7a  Constraint * siz
d590: 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79 70  eOfConstraintTyp
d5a0: 65 29 2c 20 63 6f 6e 73 74 72 61 69 6e 74 29 3b  e), constraint);
d5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5c0: 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73      index.Inputs
d5d0: 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f  .Constraints[iCo
d5e0: 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20  nstraint] =..   
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
d610: 43 6f 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73 74  Constraint(const
d620: 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  raint);..       
d630: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d640: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66        int sizeOf
d650: 4f 72 64 65 72 42 79 54 79 70 65 20 3d 20 4d 61  OrderByType = Ma
d660: 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70  rshal.SizeOf(typ
d670: 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  eof(..          
d680: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d690: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d6a0: 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 29  3_index_orderby)
d6b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d6c0: 20 20 66 6f 72 20 28 69 6e 74 20 69 4f 72 64 65    for (int iOrde
d6d0: 72 42 79 20 3d 20 30 3b 20 69 4f 72 64 65 72 42  rBy = 0; iOrderB
d6e0: 79 20 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f  y < nOrderBy; iO
d6f0: 72 64 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20  rderBy++)..     
d700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d710: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
d720: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d730: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
d740: 72 62 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20  rby orderBy =.. 
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74     new UnsafeNat
d770: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d780: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
d790: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
d7a0: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50         Marshal.P
d7b0: 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e  trToStructure(In
d7c0: 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 4f  tPtrForOffset(pO
d7d0: 72 64 65 72 42 79 2c 0d 0a 20 20 20 20 20 20 20  rderBy,..       
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 4f 72               iOr
d7f0: 64 65 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f 72  derBy * sizeOfOr
d800: 64 65 72 42 79 54 79 70 65 29 2c 20 6f 72 64 65  derByType), orde
d810: 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rBy);....       
d820: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49           index.I
d830: 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69  nputs.OrderBys[i
d840: 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20 20  OrderBy] =..    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  new SQLiteIndexO
d870: 72 64 65 72 42 79 28 6f 72 64 65 72 42 79 29 3b  rderBy(orderBy);
d880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
d8a0: 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61  nt sizeOfConstra
d8b0: 69 6e 74 55 73 61 67 65 54 79 70 65 20 3d 20 4d  intUsageType = M
d8c0: 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
d8d0: 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
d8e0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
d8f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d900: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
d910: 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d 0a 0d 0a  int_usage));....
d920: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
d930: 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74  (int iConstraint
d940: 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69 6e   = 0; iConstrain
d950: 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74 3b  t < nConstraint;
d960: 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29 0d   iConstraint++).
d970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d9a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
d9b0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61  x_constraint_usa
d9c0: 67 65 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  ge constraintUsa
d9d0: 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ge =..          
d9e0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e            new Un
d9f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
da00: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
da10: 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
da20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
da30: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50         Marshal.P
da40: 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e  trToStructure(In
da50: 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43  tPtrForOffset(pC
da60: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c 0d  onstraintUsage,.
da70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da80: 20 20 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74       iConstraint
da90: 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61   * sizeOfConstra
daa0: 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c 20 63  intUsageType), c
dab0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 29 3b  onstraintUsage);
dac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dad0: 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
dae0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
daf0: 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20  es[iConstraint] 
db00: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
db10: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
db20: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
db30: 55 73 61 67 65 28 63 6f 6e 73 74 72 61 69 6e 74  Usage(constraint
db40: 55 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  Usage);..       
db50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
db60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
dba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
dbc0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
dbd0: 69 64 20 49 6e 64 65 78 54 6f 49 6e 74 50 74 72  id IndexToIntPtr
dbe0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
dbf0: 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
dc00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
dc10: 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20  ntPtr pIndex..  
dc20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
dc30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dc40: 20 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3d      if ((index =
dc50: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65  = null) || (inde
dc60: 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75 6c 6c  x.Inputs == null
dc70: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
dc80: 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e 70        (index.Inp
dc90: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 20  uts.Constraints 
dca0: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20  == null) ||..   
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
dcc0: 64 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72  dex.Inputs.Order
dcd0: 42 79 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  Bys == null) || 
dce0: 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d  (index.Outputs =
dcf0: 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20  = null) ||..    
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64              (ind
dd10: 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74  ex.Outputs.Const
dd20: 72 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e  raintUsages == n
dd30: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
dd40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dd50: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20        return;.. 
dd60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
dd80: 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74 72  pIndex == IntPtr
dd90: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
dda0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
ddb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
ddc0: 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a  nt offset = 0;..
ddd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
dde0: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20  t nConstraint = 
ddf0: 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65 78  ReadInt32(pIndex
de00: 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20  , offset);....  
de10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 43            if (nC
de20: 6f 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e 64  onstraint != ind
de30: 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72  ex.Inputs.Constr
de40: 61 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a 20  aints.Length).. 
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
de60: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
de70: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74        if (nConst
de80: 72 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 4f  raint != index.O
de90: 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  utputs.Constrain
dea0: 74 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 0d  tUsages.Length).
deb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dec0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
ded0: 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
dee0: 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a  = sizeof(int);..
def0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
df00: 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74  tPtr pConstraint
df10: 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28 70 49   = ReadIntPtr(pI
df20: 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
df30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
df40: 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
df50: 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
df60: 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42 79      int nOrderBy
df70: 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e   = ReadInt32(pIn
df80: 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d  dex, offset);...
df90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
dfa0: 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e  set += sizeof(in
dfb0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
dfc0: 20 20 20 49 6e 74 50 74 72 20 70 4f 72 64 65 72     IntPtr pOrder
dfd0: 42 79 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28  By = ReadIntPtr(
dfe0: 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b  pIndex, offset);
dff0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e000: 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
e010: 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Size;....      
e020: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
e030: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d 20  nstraintUsage = 
e040: 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64 65  ReadIntPtr(pInde
e050: 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
e060: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
e070: 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54  izeOfConstraintT
e080: 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
e090: 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20  zeOf(typeof(..  
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
e0b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e0c0: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
e0d0: 63 6f 6e 73 74 72 61 69 6e 74 29 29 3b 0d 0a 0d  constraint));...
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
e0f0: 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e   (int iConstrain
e100: 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69  t = 0; iConstrai
e110: 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74  nt < nConstraint
e120: 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  ; iConstraint++)
e130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e150: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e160: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
e170: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ex_constraint co
e180: 6e 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20  nstraint =..    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
e1b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e1c0: 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
e1d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e1e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
e1f0: 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  .Inputs.Constrai
e200: 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d  nts[iConstraint]
e210: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e220: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53 74        Marshal.St
e230: 72 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a 20  ructureToPtr(.. 
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 49     constraint, I
e260: 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
e270: 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20 20  Constraint,..   
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e290: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73   iConstraint * s
e2a0: 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54  izeOfConstraintT
e2b0: 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d  ype), false);...
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2d0: 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f   index.Inputs.Co
e2e0: 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74  nstraints[iConst
e2f0: 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20  raint] =..      
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
e310: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  w SQLiteIndexCon
e320: 73 74 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69  straint(constrai
e330: 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
e340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e350: 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64     int sizeOfOrd
e360: 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68  erByType = Marsh
e370: 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66  al.SizeOf(typeof
e380: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e390: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
e3a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
e3b0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d  ndex_orderby));.
e3c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
e3d0: 6f 72 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79  or (int iOrderBy
e3e0: 20 3d 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c   = 0; iOrderBy <
e3f0: 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65   nOrderBy; iOrde
e400: 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  rBy++)..        
e410: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e420: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
e430: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e440: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
e450: 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20   orderBy =..    
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e470: 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
e480: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e490: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 28 0d 0a  index_orderby(..
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49 6e          index.In
e4c0: 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f  puts.OrderBys[iO
e4d0: 72 64 65 72 42 79 5d 29 3b 0d 0a 0d 0a 20 20 20  rderBy]);....   
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
e4f0: 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65 54 6f  shal.StructureTo
e500: 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
e510: 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 42            orderB
e520: 79 2c 20 49 6e 74 50 74 72 46 6f 72 4f 66 66 73  y, IntPtrForOffs
e530: 65 74 28 70 4f 72 64 65 72 42 79 2c 0d 0a 20 20  et(pOrderBy,..  
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 69 4f 72 64 65 72 42 79 20 2a 20 73 69 7a    iOrderBy * siz
e560: 65 4f 66 4f 72 64 65 72 42 79 54 79 70 65 29 2c  eOfOrderByType),
e570: 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20   false);....    
e580: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
e590: 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79  x.Inputs.OrderBy
e5a0: 73 5b 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20  s[iOrderBy] =.. 
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5c0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64     new SQLiteInd
e5d0: 65 78 4f 72 64 65 72 42 79 28 6f 72 64 65 72 42  exOrderBy(orderB
e5e0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
e5f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e600: 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73    int sizeOfCons
e610: 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65 20  traintUsageType 
e620: 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  = Marshal.SizeOf
e630: 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20  (typeof(..      
e640: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
e650: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e660: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
e670: 74 72 61 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d  traint_usage));.
e680: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
e690: 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61  or (int iConstra
e6a0: 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72  int = 0; iConstr
e6b0: 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69  aint < nConstrai
e6c0: 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b  nt; iConstraint+
e6d0: 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
e6e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e6f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
e700: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
e710: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
e720: 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69 6e 74  usage constraint
e730: 55 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20  Usage =..       
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
e750: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e760: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
e770: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
e780: 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
e7a0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
e7b0: 74 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43 6f  traintUsages[iCo
e7c0: 6e 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a 20  nstraint]);.... 
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
e7e0: 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65  arshal.Structure
e7f0: 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20  ToPtr(..        
e800: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
e810: 74 72 61 69 6e 74 55 73 61 67 65 2c 20 49 6e 74  traintUsage, Int
e820: 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43 6f  PtrForOffset(pCo
e830: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c 0d 0a  nstraintUsage,..
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74 20      iConstraint 
e860: 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69  * sizeOfConstrai
e870: 6e 74 55 73 61 67 65 54 79 70 65 29 2c 20 66 61  ntUsageType), fa
e880: 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lse);....       
e890: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f           index.O
e8a0: 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  utputs.Constrain
e8b0: 74 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72 61  tUsages[iConstra
e8c0: 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  int] =..        
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
e8e0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
e8f0: 72 61 69 6e 74 55 73 61 67 65 28 63 6f 6e 73 74  raintUsage(const
e900: 72 61 69 6e 74 55 73 61 67 65 29 3b 0d 0a 20 20  raintUsage);..  
e910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e920: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e930: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
e940: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
e950: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
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 2f 2f  ////////////////
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
e9b0: 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ion SQLiteModule
e9c0: 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20 20   Base Class..   
e9d0: 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20 2a   /* NOT SEALED *
e9e0: 2f 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 61 62  /..    public ab
e9f0: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
ea00: 69 74 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20  iteModule :..   
ea10: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
ea20: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2c 20 2f  ManagedModule, /
ea30: 2a 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  *ISQLiteNativeMo
ea40: 64 75 6c 65 2c 2a 2f 20 49 44 69 73 70 6f 73 61  dule,*/ IDisposa
ea50: 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ble..    {..    
ea60: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
ea70: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
ea80: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
ea90: 6f 6e 73 74 20 64 6f 75 62 6c 65 20 44 65 66 61  onst double Defa
eaa0: 75 6c 74 43 6f 73 74 20 3d 20 64 6f 75 62 6c 65  ultCost = double
eab0: 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a 20 20 20 20  .MaxValue;..    
eac0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ead0: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
eb30: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
eb40: 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  a..        priva
eb50: 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te UnsafeNativeM
eb60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
eb70: 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75  odule nativeModu
eb80: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  le;..        pri
eb90: 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c  vate Dictionary<
eba0: 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69  IntPtr, SQLiteVi
ebb0: 72 74 75 61 6c 54 61 62 6c 65 3e 20 74 61 62 6c  rtualTable> tabl
ebc0: 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  es;..        pri
ebd0: 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79 3c  vate Dictionary<
ebe0: 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69  IntPtr, SQLiteVi
ebf0: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
ec00: 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 20 20 20 20  > cursors;..    
ec10: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ec20: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
ec80: 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d 65  gion Internal Me
ec90: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 69  thods..        i
eca0: 6e 74 65 72 6e 61 6c 20 55 6e 73 61 66 65 4e 61  nternal UnsafeNa
ecb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ecc0: 74 65 33 5f 6d 6f 64 75 6c 65 20 43 72 65 61 74  te3_module Creat
ecd0: 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d  eNativeModule().
ece0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ecf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
ed00: 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  reateNativeModul
ed10: 65 28 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f  e(CreateNativeMo
ed20: 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20 20  duleImpl());..  
ed30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ed40: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ed50: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
eda0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
edb0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
edc0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70  ctors..        p
edd0: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
ede0: 6c 65 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d  le(string name).
edf0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ee00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65          if (name
ee10: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ee20: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
ee30: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
ee40: 6c 45 78 63 65 70 74 69 6f 6e 28 22 6e 61 6d 65  lException("name
ee50: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
ee60: 20 20 20 74 68 69 73 2e 6e 61 6d 65 20 3d 20 6e     this.name = n
ee70: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
ee80: 20 20 74 68 69 73 2e 74 61 62 6c 65 73 20 3d 20    this.tables = 
ee90: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 49  new Dictionary<I
eea0: 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72  ntPtr, SQLiteVir
eeb0: 74 75 61 6c 54 61 62 6c 65 3e 28 29 3b 0d 0a 20  tualTable>();.. 
eec0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
eed0: 63 75 72 73 6f 72 73 20 3d 20 6e 65 77 20 44 69  cursors = new Di
eee0: 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72 2c  ctionary<IntPtr,
eef0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
ef00: 62 6c 65 43 75 72 73 6f 72 3e 28 29 3b 0d 0a 20  bleCursor>();.. 
ef10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ef20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
ef30: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ef80: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
ef90: 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f  on Private Metho
efa0: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ds..        priv
efb0: 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65  ate UnsafeNative
efc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
efd0: 6d 6f 64 75 6c 65 20 43 72 65 61 74 65 4e 61 74  module CreateNat
efe0: 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  iveModule(..    
eff0: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 4e          ISQLiteN
f000: 61 74 69 76 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  ativeModule modu
f010: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
f020: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f030: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
f040: 4d 6f 64 75 6c 65 20 3d 20 6e 65 77 20 55 6e 73  Module = new Uns
f050: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f060: 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 28  .sqlite3_module(
f070: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f080: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65  nativeModule.iVe
f090: 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 0d 0a 20 20  rsion = 2;....  
f0a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
f0b0: 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dule != null).. 
f0c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
f0e0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
f0f0: 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  te = new UnsafeN
f100: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 72  ativeMethods.xCr
f110: 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
f120: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f130: 65 2e 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20  e.xCreate);.... 
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
f150: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
f160: 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  nect = new Unsaf
f170: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
f180: 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
f1a0: 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 29 3b 0d  dule.xConnect);.
f1b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f1c0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
f1d0: 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65 77  xBestIndex = new
f1e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f1f0: 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78 28  hods.xBestIndex(
f200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f210: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65        module.xBe
f220: 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  stIndex);....   
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
f240: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
f250: 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
f260: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f270: 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f290: 20 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e    module.xDiscon
f2a0: 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nect);....      
f2b0: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
f2c0: 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  Module.xDestroy 
f2d0: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
f2e0: 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74 72  veMethods.xDestr
f2f0: 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
f300: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
f310: 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20  xDestroy);....  
f320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
f330: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e  tiveModule.xOpen
f340: 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
f350: 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65 6e  iveMethods.xOpen
f360: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f370: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4f         module.xO
f380: 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pen);....       
f390: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
f3a0: 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20 6e  odule.xClose = n
f3b0: 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
f3c0: 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d 0a  ethods.xClose(..
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3e0: 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73      module.xClos
f3f0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
f400: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
f410: 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e 65  ule.xFilter = ne
f420: 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
f430: 74 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d 0a  thods.xFilter(..
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74      module.xFilt
f460: 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
f470: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
f480: 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77  dule.xNext = new
f490: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f4a0: 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20  hods.xNext(..   
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 29 3b 0d   module.xNext);.
f4d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f4e0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
f4f0: 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66  xEof = new Unsaf
f500: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
f510: 45 6f 66 28 6d 6f 64 75 6c 65 2e 78 45 6f 66 29  Eof(module.xEof)
f520: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f530: 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
f540: 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20  e.xColumn = new 
f550: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f560: 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20  ods.xColumn(..  
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e    module.xColumn
f590: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f5a0: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
f5b0: 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77 20  le.xRowId = new 
f5c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f5d0: 6f 64 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20 20  ods.xRowId(..   
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 29 3b   module.xRowId);
f600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f610: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
f620: 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55  .xUpdate = new U
f630: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f640: 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20  ds.xUpdate(..   
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 29   module.xUpdate)
f670: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f680: 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
f690: 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55  e.xBegin = new U
f6a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f6b0: 64 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20 20  ds.xBegin(..    
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 29 3b 0d  module.xBegin);.
f6e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f6f0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
f700: 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61  xSync = new Unsa
f710: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f720: 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20  xSync(..        
f730: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
f740: 6c 65 2e 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20  le.xSync);....  
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
f760: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d  tiveModule.xComm
f770: 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  it = new UnsafeN
f780: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
f790: 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
f7a0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f7b0: 65 2e 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20  e.xCommit);.... 
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
f7d0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c  ativeModule.xRol
f7e0: 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61  lback = new Unsa
f7f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f800: 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  xRollback(..    
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f820: 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  module.xRollback
f830: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f840: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
f850: 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
f860: 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
f870: 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64  iveMethods.xFind
f880: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
f8a0: 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74  odule.xFindFunct
f8b0: 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
f8c0: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
f8d0: 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20  odule.xRename = 
f8e0: 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
f8f0: 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28  Methods.xRename(
f900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f910: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65        module.xRe
f920: 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
f930: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
f940: 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
f950: 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  t = new UnsafeNa
f960: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61 76  tiveMethods.xSav
f970: 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  epoint(..       
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
f990: 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 29 3b  ule.xSavepoint);
f9a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f9b0: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
f9c0: 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20  .xRelease = new 
f9d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f9e0: 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20  ods.xRelease(.. 
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa00: 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61     module.xRelea
fa10: 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
fa20: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
fa30: 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
fa40: 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
fa50: 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
fa60: 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
fa80: 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 29  ule.xRollbackTo)
fa90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
fab0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
fac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fad0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
fae0: 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e  xCreate = new Un
faf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fb00: 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  s.xCreate(..    
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb20: 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20 20  xCreate);....   
fb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fb40: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
fb50: 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ct = new UnsafeN
fb60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
fb70: 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6e              xCon
fb90: 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nect);....      
fba0: 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
fbb0: 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
fbc0: 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  x = new UnsafeNa
fbd0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73  tiveMethods.xBes
fbe0: 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 42 65               xBe
fc00: 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  stIndex);....   
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fc20: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
fc30: 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
fc40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fc50: 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20  xDisconnect(..  
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc70: 20 20 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b 0d    xDisconnect);.
fc80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fc90: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
fca0: 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20 55  xDestroy = new U
fcb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fcc0: 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20 20  ds.xDestroy(..  
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fce0: 20 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a    xDestroy);....
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70  nativeModule.xOp
fd10: 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  en = new UnsafeN
fd20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70  ativeMethods.xOp
fd30: 65 6e 28 78 4f 70 65 6e 29 3b 0d 0a 20 20 20 20  en(xOpen);..    
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
fd50: 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20  veModule.xClose 
fd60: 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
fd70: 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65  veMethods.xClose
fd80: 28 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  (xClose);....   
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
fda0: 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65  iveModule.xFilte
fdb0: 72 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  r = new UnsafeNa
fdc0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c  tiveMethods.xFil
fdd0: 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
fde0: 20 20 20 20 20 20 20 20 20 20 78 46 69 6c 74 65            xFilte
fdf0: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
fe00: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
fe10: 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20  ule.xNext = new 
fe20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fe30: 6f 64 73 2e 78 4e 65 78 74 28 78 4e 65 78 74 29  ods.xNext(xNext)
fe40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fe50: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
fe60: 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61 66  xEof = new Unsaf
fe70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
fe80: 45 6f 66 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20  Eof(xEof);....  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
fea0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
feb0: 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  mn = new UnsafeN
fec0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f  ativeMethods.xCo
fed0: 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lumn(..         
fee0: 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6c 75             xColu
fef0: 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mn);....        
ff00: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
ff10: 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65  dule.xRowId = ne
ff20: 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
ff30: 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 78 52 6f  thods.xRowId(xRo
ff40: 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wId);....       
ff50: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
ff60: 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20  odule.xUpdate = 
ff70: 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
ff80: 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28  Methods.xUpdate(
ff90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ffa0: 20 20 20 20 20 20 78 55 70 64 61 74 65 29 3b 0d        xUpdate);.
ffb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ffc0: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
ffd0: 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e 73  xBegin = new Uns
ffe0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fff0: 2e 78 42 65 67 69 6e 28 78 42 65 67 69 6e 29 3b  .xBegin(xBegin);
10000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10010 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
10020 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61 66  Sync = new Unsaf
10030 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
10040 53 79 6e 63 28 78 53 79 6e 63 29 3b 0d 0a 0d 0a  Sync(xSync);....
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  nativeModule.xCo
10070 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66  mmit = new Unsaf
10080 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
10090 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f               xCo
100b0 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mmit);....      
100c0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
100d0 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
100e0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
100f0 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c  iveMethods.xRoll
10100 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
10110 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c             xRoll
10120 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
10130 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
10140 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
10150 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  tion = new Unsaf
10160 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
10170 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e     xFindFunction
101a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
101b0 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
101c0 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65 77  le.xRename = new
101d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
101e0 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a 20  hods.xRename(.. 
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10200 20 20 20 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a     xRename);....
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61  nativeModule.xSa
10230 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e  vepoint = new Un
10240 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10250 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  s.xSavepoint(.. 
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 78 53 61 76 65 70 6f 69 6e 74 29 3b 0d     xSavepoint);.
10280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10290 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
102a0 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 55  xRelease = new U
102b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
102c0 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20 20  ds.xRelease(..  
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a    xRelease);....
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
10310 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20 55  llbackTo = new U
10320 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10330 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  ds.xRollbackTo(.
10340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10350 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54 6f       xRollbackTo
10360 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10370 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10380 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 4d 6f   return nativeMo
10390 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dule;..        }
103a0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
103b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
103c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10400 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10410 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65     #region Prote
10420 63 74 65 64 20 4d 65 6d 62 65 72 73 0d 0a 20 20  cted Members..  
10430 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f        #region Mo
10440 64 75 6c 65 20 48 65 6c 70 65 72 20 4d 65 74 68  dule Helper Meth
10450 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ods..        pro
10460 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49  tected virtual I
10470 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
10480 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76 65 4d  le CreateNativeM
10490 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20 20 20  oduleImpl()..   
104a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
104b0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
104c0 20 2f 2a 20 4e 4f 54 45 3a 20 55 73 65 20 62 75   /* NOTE: Use bu
104d0 69 6c 74 2d 69 6e 20 64 65 66 61 75 6c 74 73 2e  ilt-in defaults.
104e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   */..        }..
104f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
10500 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
10510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10550 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10560 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
10570 54 61 62 6c 65 20 48 65 6c 70 65 72 20 4d 65 74  Table Helper Met
10580 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
10590 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
105a0 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 54  IntPtr AllocateT
105b0 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20  able()..        
105c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
105d0 6e 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68 61  nt size = Marsha
105e0 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66 28  l.SizeOf(typeof(
105f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10600 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
10610 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 74  thods.sqlite3_vt
10620 61 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ab));....       
10630 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
10640 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74  teMemory.Allocat
10650 65 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20  e(size);..      
10660 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
106c0 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
106d0 75 61 6c 20 76 6f 69 64 20 5a 65 72 6f 54 61 62  ual void ZeroTab
106e0 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
106f0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
10700 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10710 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10720 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d       if (pVtab =
10730 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
10760 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
10770 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
10780 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73        SQLiteMars
10790 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28  hal.WriteIntPtr(
107a0 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 49  pVtab, offset, I
107b0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
107c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
107d0 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a  et += IntPtr.Siz
107e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
107f0 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e    SQLiteMarshal.
10800 57 72 69 74 65 49 6e 74 33 32 28 70 56 74 61 62  WriteInt32(pVtab
10810 2c 20 6f 66 66 73 65 74 2c 20 30 29 3b 0d 0a 0d  , offset, 0);...
10820 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
10830 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e  set += sizeof(in
10840 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10850 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
10860 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 56 74  .WriteIntPtr(pVt
10870 61 62 2c 20 6f 66 66 73 65 74 2c 20 49 6e 74 50  ab, offset, IntP
10880 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20  tr.Zero);..     
10890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
108f0 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
10900 74 75 61 6c 20 76 6f 69 64 20 46 72 65 65 54 61  tual void FreeTa
10910 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
10920 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
10930 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10940 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10950 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
10960 72 6f 72 28 70 56 74 61 62 2c 20 6e 75 6c 6c 29  ror(pVtab, null)
10970 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ;..            S
10980 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
10990 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
109a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
109b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
109c0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10a10 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61        #region Na
10a20 74 69 76 65 20 43 75 72 73 6f 72 20 48 65 6c 70  tive Cursor Help
10a30 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
10a40 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
10a50 72 74 75 61 6c 20 49 6e 74 50 74 72 20 41 6c 6c  rtual IntPtr All
10a60 6f 63 61 74 65 43 75 72 73 6f 72 28 29 0d 0a 20  ocateCursor().. 
10a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10a80 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
10a90 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28   Marshal.SizeOf(
10aa0 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20  typeof(..       
10ab0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
10ac0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10ad0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
10ae0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
10af0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
10b00 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
10b10 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  size);..        
10b20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
10b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10b80 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
10b90 6c 20 76 6f 69 64 20 46 72 65 65 43 75 72 73 6f  l void FreeCurso
10ba0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
10bb0 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a  IntPtr pCursor..
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10bd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10be0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
10bf0 72 79 2e 46 72 65 65 28 70 43 75 72 73 6f 72 29  ry.Free(pCursor)
10c00 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
10c10 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
10c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
10c80 72 65 67 69 6f 6e 20 54 61 62 6c 65 20 4c 6f 6f  region Table Loo
10c90 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  kup Methods..   
10ca0 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
10cb0 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 54 61  irtual IntPtr Ta
10cc0 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 0d 0a  bleFromCursor(..
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
10ce0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
10cf0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
10d00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10d10 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d 3d    if (pCursor ==
10d20 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10d40 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72  eturn IntPtr.Zer
10d50 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
10d60 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
10d70 2e 52 65 61 64 49 6e 74 50 74 72 28 70 43 75 72  .ReadIntPtr(pCur
10d80 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sor);..        }
10d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
10da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10de0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
10df0 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
10e00 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
10e10 62 6c 65 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  ble TableFromInt
10e20 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
10e30 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10e60 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20        if (pVtab 
10e70 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
10e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ea0 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56  SetTableError(pV
10eb0 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e 61  tab, "invalid na
10ec0 74 69 76 65 20 74 61 62 6c 65 22 29 3b 0d 0a 20  tive table");.. 
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10ee0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
10ef0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10f00 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
10f10 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
10f20 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
10f30 20 20 20 69 66 20 28 28 74 61 62 6c 65 73 20 21     if ((tables !
10f40 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
10f50 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
10f60 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 70  es.TryGetValue(p
10f70 56 74 61 62 2c 20 6f 75 74 20 74 61 62 6c 65 29  Vtab, out table)
10f80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fa0 20 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b 0d    return table;.
10fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
10fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
10fd0 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
10fe0 62 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  b, String.Format
10ff0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11000 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
11010 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 22 6d 61 6e 61 67 65 64 20 74 61 62 6c 65 20 66  "managed table f
11040 6f 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64  or {0} not found
11050 22 2c 20 70 56 74 61 62 29 29 3b 0d 0a 0d 0a 20  ", pVtab));.... 
11060 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11070 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
11080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
110c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
110e0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
110f0 61 6c 20 49 6e 74 50 74 72 20 54 61 62 6c 65 54  al IntPtr TableT
11100 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  oIntPtr(..      
11110 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
11120 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a  ualTable table..
11130 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11150 20 20 20 20 20 20 69 66 20 28 28 74 61 62 6c 65        if ((table
11160 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74 61   == null) || (ta
11170 62 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  bles == null))..
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65  return IntPtr.Ze
111a0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
111b0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20     IntPtr pVtab 
111c0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
111d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
111e0 20 73 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65   success = false
111f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11200 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
11210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11220 20 20 20 20 20 70 56 74 61 62 20 3d 20 41 6c 6c       pVtab = All
11230 6f 63 61 74 65 54 61 62 6c 65 28 29 3b 0d 0a 0d  ocateTable();...
11240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11250 20 69 66 20 28 70 56 74 61 62 20 21 3d 20 49 6e   if (pVtab != In
11260 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
11270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 5a 65 72 6f 54 61 62 6c 65 28 70 56 74     ZeroTable(pVt
112a0 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
112b0 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 2e            table.
112c0 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20 70  NativeHandle = p
112d0 56 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20 20  Vtab;..         
112e0 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65             table
112f0 73 2e 41 64 64 28 70 56 74 61 62 2c 20 74 61 62  s.Add(pVtab, tab
11300 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le);..          
11310 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65 73            succes
11320 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  s = true;..     
11330 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11350 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
11360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11380 20 69 66 20 28 21 73 75 63 63 65 73 73 20 26 26   if (!success &&
11390 20 28 70 56 74 61 62 20 21 3d 20 49 6e 74 50 74   (pVtab != IntPt
113a0 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20  r.Zero))..      
113b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 46 72 65 65 54 61 62 6c 65 28 70 56 74 61 62   FreeTable(pVtab
113e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
113f0 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20          pVtab = 
11400 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11420 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11440 74 75 72 6e 20 70 56 74 61 62 3b 0d 0a 20 20 20  turn pVtab;..   
11450 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11460 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
11470 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
114c0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
114d0 20 43 75 72 73 6f 72 20 4c 6f 6f 6b 75 70 20 4d   Cursor Lookup M
114e0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
114f0 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
11500 6c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  l SQLiteVirtualT
11510 61 62 6c 65 43 75 72 73 6f 72 20 43 75 72 73 6f  ableCursor Curso
11520 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20  rFromIntPtr(..  
11530 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
11540 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
11550 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
11560 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
11570 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
11580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
11590 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72  Cursor == IntPtr
115a0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
115b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
115c0 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
115d0 72 72 6f 72 28 70 56 74 61 62 2c 20 22 69 6e 76  rror(pVtab, "inv
115e0 61 6c 69 64 20 6e 61 74 69 76 65 20 63 75 72 73  alid native curs
115f0 6f 72 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  or");..         
11600 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
11610 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
11620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11630 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
11640 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
11650 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
11660 20 20 69 66 20 28 28 63 75 72 73 6f 72 73 20 21    if ((cursors !
11670 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
11680 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73              curs
11690 6f 72 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ors.TryGetValue(
116a0 70 43 75 72 73 6f 72 2c 20 6f 75 74 20 63 75 72  pCursor, out cur
116b0 73 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  sor))..         
116c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
116d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72        return cur
116e0 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sor;..          
116f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11700 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
11710 28 70 56 74 61 62 2c 20 53 74 72 69 6e 67 2e 46  (pVtab, String.F
11720 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
11730 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
11740 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
11750 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
11760 20 20 20 20 20 22 6d 61 6e 61 67 65 64 20 63 75       "managed cu
11770 72 73 6f 72 20 66 6f 72 20 7b 30 7d 20 6e 6f 74  rsor for {0} not
11780 20 66 6f 75 6e 64 22 2c 20 70 43 75 72 73 6f 72   found", pCursor
11790 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
117a0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
117b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
117c0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11810 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
11820 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74  ed virtual IntPt
11830 72 20 43 75 72 73 6f 72 54 6f 49 6e 74 50 74 72  r CursorToIntPtr
11840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
11850 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
11860 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
11870 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11880 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11890 20 20 20 20 20 20 69 66 20 28 28 63 75 72 73 6f        if ((curso
118a0 72 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 63  r == null) || (c
118b0 75 72 73 6f 72 73 20 3d 3d 20 6e 75 6c 6c 29 29  ursors == null))
118c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118d0 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
118e0 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
118f0 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
11900 73 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  sor = IntPtr.Zer
11910 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
11920 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20 66  bool success = f
11930 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
11940 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
11950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11960 20 20 20 20 20 20 20 20 20 70 43 75 72 73 6f 72           pCursor
11970 20 3d 20 41 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = AllocateCurso
11980 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
11990 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75 72          if (pCur
119a0 73 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  sor != IntPtr.Ze
119b0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
119c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
119d0 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73              curs
119e0 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  or.NativeHandle 
119f0 3d 20 70 43 75 72 73 6f 72 3b 0d 0a 20 20 20 20  = pCursor;..    
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 63 75 72 73 6f 72 73 2e 41 64 64 28 70 43 75 72  cursors.Add(pCur
11a20 73 6f 72 2c 20 63 75 72 73 6f 72 29 3b 0d 0a 20  sor, cursor);.. 
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 73 75 63 63 65 73 73 20 3d 20 74 72 75     success = tru
11a50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11a60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11a80 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
11a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11aa0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
11ab0 75 63 63 65 73 73 20 26 26 20 28 70 43 75 72 73  uccess && (pCurs
11ac0 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
11ad0 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o))..           
11ae0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11af0 20 20 20 20 20 20 20 20 20 20 20 20 46 72 65 65              Free
11b00 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b  Cursor(pCursor);
11b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11b20 20 20 20 20 20 20 70 43 75 72 73 6f 72 20 3d 20        pCursor = 
11b30 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11b70 74 75 72 6e 20 70 43 75 72 73 6f 72 3b 0d 0a 20  turn pCursor;.. 
11b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11b90 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
11ba0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
11be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11bf0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
11c00 6f 6e 20 54 61 62 6c 65 20 44 65 63 6c 61 72 61  on Table Declara
11c10 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74 68  tion Helper Meth
11c20 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ods..        pro
11c30 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 53  tected virtual S
11c40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
11c50 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a 20 20  eclareTable(..  
11c60 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
11c70 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
11c80 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
11c90 20 20 20 20 73 74 72 69 6e 67 20 73 71 6c 2c 0d      string sql,.
11ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
11cb0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
11cc0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11cd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11ce0 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
11cf0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
11d00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11d20 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f  or = "invalid co
11d30 6e 6e 65 63 74 69 6f 6e 22 3b 0d 0a 20 20 20 20  nnection";..    
11d40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11d50 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
11d60 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
11d70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11d80 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
11d90 73 65 20 73 71 6c 69 74 65 42 61 73 65 20 3d 20  se sqliteBase = 
11da0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 3b  connection._sql;
11db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11dc0 69 66 20 28 73 71 6c 69 74 65 42 61 73 65 20 3d  if (sqliteBase =
11dd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11de0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11df0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11e00 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
11e10 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
11e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e30 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
11e40 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
11e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11e70 74 75 72 6e 20 73 71 6c 69 74 65 42 61 73 65 2e  turn sqliteBase.
11e80 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61  DeclareVirtualTa
11e90 62 6c 65 28 74 68 69 73 2c 20 73 71 6c 2c 20 72  ble(this, sql, r
11ea0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
11eb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
11ec0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
11ed0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11f20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
11f30 45 72 72 6f 72 20 48 61 6e 64 6c 69 6e 67 20 48  Error Handling H
11f40 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
11f50 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
11f60 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65   virtual bool Se
11f70 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20  tTableError(..  
11f80 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
11f90 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
11fa0 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f       string erro
11fb0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
11fc0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11fd0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
11fe0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12000 28 4c 6f 67 45 72 72 6f 72 73 29 0d 0a 20 20 20  (LogErrors)..   
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
12040 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45  gMessage(SQLiteE
12050 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 2c 0d  rrorCode.Error,.
12060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12070 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
12080 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
12090 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
120a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
120b0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69 72              "Vir
120c0 74 75 61 6c 20 74 61 62 6c 65 20 65 72 72 6f 72  tual table error
120d0 3a 20 7b 30 7d 22 2c 20 65 72 72 6f 72 29 29 3b  : {0}", error));
120e0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
12110 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
12120 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  h..            {
12130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12140 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
12150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
12170 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74 50  f (pVtab == IntP
12180 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
12190 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
121a0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
121b0 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
121c0 74 20 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 20  t = IntPtr.Size 
121d0 2b 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a  + sizeof(int);..
121e0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
121f0 74 72 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69  tr pError = SQLi
12200 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  teMarshal.ReadIn
12210 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73  tPtr(pVtab, offs
12220 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
12230 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21      if (pError !
12240 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
12250 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
12270 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
12280 28 70 45 72 72 6f 72 29 3b 20 70 45 72 72 6f 72  (pError); pError
12290 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
122a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
122b0 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
122c0 72 69 74 65 49 6e 74 50 74 72 28 70 56 74 61 62  riteIntPtr(pVtab
122d0 2c 20 6f 66 66 73 65 74 2c 20 70 45 72 72 6f 72  , offset, pError
122e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
122f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12300 20 69 66 20 28 65 72 72 6f 72 20 3d 3d 20 6e 75   if (error == nu
12310 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12320 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
12330 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12340 20 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20   bool success = 
12350 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12360 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
12370 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12380 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
12390 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
123a0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
123b0 72 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20  ring(error);..  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
123d0 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69 74  LiteMarshal.Writ
123e0 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f  eIntPtr(pVtab, o
123f0 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d  ffset, pError);.
12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12410 20 73 75 63 63 65 73 73 20 3d 20 74 72 75 65 3b   success = true;
12420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12430 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
12440 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
12450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12460 20 20 20 20 20 69 66 20 28 21 73 75 63 63 65 73       if (!succes
12470 73 20 26 26 20 28 70 45 72 72 6f 72 20 21 3d 20  s && (pError != 
12480 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
124a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124b0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
124c0 72 79 2e 46 72 65 65 28 70 45 72 72 6f 72 29 3b  ry.Free(pError);
124d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124e0 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49        pError = I
124f0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12520 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
12530 75 72 6e 20 73 75 63 63 65 73 73 3b 0d 0a 20 20  urn success;..  
12540 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12550 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
125a0 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
125b0 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74  virtual bool Set
125c0 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20  TableError(..   
125d0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
125e0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
125f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12600 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
12610 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
12620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12630 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 3d 3d      if (table ==
12640 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
12660 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
12670 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
12680 62 20 3d 20 74 61 62 6c 65 2e 4e 61 74 69 76 65  b = table.Native
12690 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  Handle;....     
126a0 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62         if (pVtab
126b0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
126c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
126d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
126e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
126f0 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45 72  eturn SetTableEr
12700 72 6f 72 28 70 56 74 61 62 2c 20 65 72 72 6f 72  ror(pVtab, error
12710 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
12720 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
12760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  ....        prot
12780 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62 6f  ected virtual bo
12790 6f 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f  ol SetCursorErro
127a0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
127b0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
127c0 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
127d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
127e0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
127f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
12800 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12810 20 20 69 66 20 28 63 75 72 73 6f 72 20 3d 3d 20    if (cursor == 
12820 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12830 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12840 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12850 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
12860 6f 72 20 3d 20 63 75 72 73 6f 72 2e 4e 61 74 69  or = cursor.Nati
12870 76 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  veHandle;....   
12880 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75           if (pCu
12890 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  rsor == IntPtr.Z
128a0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
128b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
128c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
128d0 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20     IntPtr pVtab 
128e0 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f  = TableFromCurso
128f0 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
12900 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
12910 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  Vtab == IntPtr.Z
12920 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
12930 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12940 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12950 20 20 20 72 65 74 75 72 6e 20 53 65 74 54 61 62     return SetTab
12960 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
12970 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
12980 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
12990 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
129a0 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
129f0 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 64 65      #region Inde
12a00 78 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65  x Handling Helpe
12a10 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
12a20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
12a30 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 44 65 66  tual bool SetDef
12a40 61 75 6c 74 45 73 74 69 6d 61 74 65 64 43 6f 73  aultEstimatedCos
12a50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12a60 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65  SQLiteIndex inde
12a70 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  x..            )
12a80 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12a90 20 20 20 20 20 20 20 20 20 69 66 20 28 28 69 6e           if ((in
12aa0 64 65 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  dex == null) || 
12ab0 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20 3d  (index.Outputs =
12ac0 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
12ad0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12ae0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12af0 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74         index.Out
12b00 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f  puts.EstimatedCo
12b10 73 74 20 3d 20 44 65 66 61 75 6c 74 43 6f 73 74  st = DefaultCost
12b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
12b30 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
12b40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12b50 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
12b60 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
12b70 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
12bd0 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
12be0 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
12bf0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6c 6f 67  private bool log
12c00 45 72 72 6f 72 73 3b 0d 0a 20 20 20 20 20 20 20  Errors;..       
12c10 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
12c20 62 6f 6f 6c 20 4c 6f 67 45 72 72 6f 72 73 0d 0a  bool LogErrors..
12c30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12c40 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
12c50 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
12c60 74 75 72 6e 20 6c 6f 67 45 72 72 6f 72 73 3b 20  turn logErrors; 
12c70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
12c80 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
12c90 65 64 28 29 3b 20 6c 6f 67 45 72 72 6f 72 73 20  ed(); logErrors 
12ca0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
12cb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12cc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12d10 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
12d20 20 6c 6f 67 45 78 63 65 70 74 69 6f 6e 73 3b 0d   logExceptions;.
12d30 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
12d40 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 4c 6f 67  virtual bool Log
12d50 45 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20  Exceptions..    
12d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12d70 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
12d80 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
12d90 20 6c 6f 67 45 78 63 65 70 74 69 6f 6e 73 3b 20   logExceptions; 
12da0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
12db0 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
12dc0 65 64 28 29 3b 20 6c 6f 67 45 78 63 65 70 74 69  ed(); logExcepti
12dd0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
12de0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12df0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
12e00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
12e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
12e60 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76  ion ISQLiteNativ
12e70 65 4d 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d  eModule Members.
12e80 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
12e90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12ea0 20 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20   xCreate(..     
12eb0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
12ec0 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
12ed0 49 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20  IntPtr pAux,..  
12ee0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
12ef0 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gc,..           
12f00 20 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 2c 0d   IntPtr[] argv,.
12f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
12f20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a   IntPtr pVtab,..
12f30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
12f40 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d 0a 20  IntPtr pError.. 
12f50 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
12f60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12f70 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
12f80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12f90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12fa0 66 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74  fileName = SQLit
12fb0 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72  eString.StringFr
12fc0 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20  omUtf8IntPtr(.. 
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
12ff0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
13000 62 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20  b_filename(pDb, 
13010 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a  IntPtr.Zero));..
13020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13030 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
13040 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
13050 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
13060 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 20 20 20 70 44 62 2c 20 66 69 6c 65 4e        pDb, fileN
13090 61 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  ame, false))..  
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
130b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
130c0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
130d0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
130e0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
130f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
13100 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d  g error = null;.
13110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13120 20 20 20 20 20 20 20 69 66 20 28 43 72 65 61 74         if (Creat
13130 65 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 70 41  e(connection, pA
13140 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ux,..           
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
13170 72 69 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66  ringArrayFromUtf
13180 38 49 6e 74 50 74 72 41 72 72 61 79 28 61 72 67  8IntPtrArray(arg
13190 76 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  v),..           
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20   ref table, ref 
131c0 65 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  error) == SQLite
131d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13210 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
13220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d           pVtab =
13260 20 54 61 62 6c 65 54 6f 49 6e 74 50 74 72 28 74   TableToIntPtr(t
13270 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  able);..        
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
132a0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
13330 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
13340 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20 20  FromString(..   
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
13370 20 74 61 62 6c 65 20 77 61 73 20 63 72 65 61 74   table was creat
13380 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed");..         
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
133a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
133b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
133d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
133e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
13410 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
13420 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 72 72  trFromString(err
13430 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
13440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13470 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
13480 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
13490 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
134a0 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
134b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
134c0 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
134d0 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  r = SQLiteString
134e0 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
134f0 74 72 69 6e 67 28 65 2e 54 6f 53 74 72 69 6e 67  tring(e.ToString
13500 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
13510 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13520 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
13530 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
13540 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
13550 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
135a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
135b0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
135c0 65 20 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  e xConnect(..   
135d0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
135e0 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  pDb,..          
135f0 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a    IntPtr pAux,..
13600 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
13610 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  argc,..         
13620 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72 67 76     IntPtr[] argv
13630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
13640 65 66 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c  ef IntPtr pVtab,
13650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
13660 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 0d  f IntPtr pError.
13670 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
13680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13690 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
136a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
136b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
136c0 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 53 51 4c  g fileName = SQL
136d0 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
136e0 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 0d  FromUtf8IntPtr(.
136f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13700 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13710 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13720 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 28 70 44 62  _db_filename(pDb
13730 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 3b  , IntPtr.Zero));
13740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13750 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
13760 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
13770 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
13780 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 20 20 20 20 70 44 62 2c 20 66 69 6c          pDb, fil
137b0 65 4e 61 6d 65 2c 20 66 61 6c 73 65 29 29 0d 0a  eName, false))..
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
137e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
137f0 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20  tualTable table 
13800 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
13820 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c  ing error = null
13830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13840 20 20 20 20 20 20 20 20 20 69 66 20 28 43 6f 6e           if (Con
13850 6e 65 63 74 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c  nect(connection,
13860 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67      SQLiteString
13890 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72 6f 6d  .StringArrayFrom
138a0 55 74 66 38 49 6e 74 50 74 72 41 72 72 61 79 28  Utf8IntPtrArray(
138b0 61 72 67 76 29 2c 0d 0a 20 20 20 20 20 20 20 20  argv),..        
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 72 65 66 20 74 61 62 6c 65 2c 20 72      ref table, r
138e0 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51 4c  ef error) == SQL
138f0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
13900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13910 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
13940 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13970 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
13980 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74 50 74  b = TableToIntPt
13990 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  r(table);..     
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
139c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
139d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
139e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69     pError = SQLi
13a50 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
13a60 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a  PtrFromString(..
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 20 20 20 20 20 20 20                  
13a90 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20 63 72  "no table was cr
13aa0 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 20 20  eated");..      
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13ad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
13b00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
13b30 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
13b40 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
13b50 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
13b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
13ba0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
13bb0 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
13bc0 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
13bd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
13bf0 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74 72  rror = SQLiteStr
13c00 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
13c10 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53 74 72  omString(e.ToStr
13c20 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
13c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13c40 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
13c50 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
13c60 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
13c70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
13c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13cc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
13cd0 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
13ce0 43 6f 64 65 20 78 42 65 73 74 49 6e 64 65 78 28  Code xBestIndex(
13cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
13d00 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
13d10 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
13d20 70 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20  pIndex..        
13d30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
13d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
13d50 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
13d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d70 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
13d80 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62  able table = Tab
13d90 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74  leFromIntPtr(pVt
13da0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
13db0 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
13dc0 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
13e00 6e 64 65 78 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ndex = null;....
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
13e30 6c 2e 49 6e 64 65 78 46 72 6f 6d 49 6e 74 50 74  l.IndexFromIntPt
13e40 72 28 70 49 6e 64 65 78 2c 20 72 65 66 20 69 6e  r(pIndex, ref in
13e50 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13e70 28 42 65 73 74 49 6e 64 65 78 28 74 61 62 6c 65  (BestIndex(table
13e80 2c 20 69 6e 64 65 78 29 20 3d 3d 20 53 51 4c 69  , index) == SQLi
13e90 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
13ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13eb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49 6e  SQLiteMarshal.In
13ee0 64 65 78 54 6f 49 6e 74 50 74 72 28 69 6e 64 65  dexToIntPtr(inde
13ef0 78 2c 20 70 49 6e 64 65 78 29 3b 0d 0a 20 20 20  x, pIndex);..   
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
13f20 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
13f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13f50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13f60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13f70 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
13f80 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
13f90 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
13fa0 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
13fb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13fc0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
13fd0 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
13fe0 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
13ff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14000 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
14010 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
14020 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
14030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
14040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14080 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
14090 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
140a0 6f 72 43 6f 64 65 20 78 44 69 73 63 6f 6e 6e 65  orCode xDisconne
140b0 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
140c0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
140d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
140e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
140f0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
14100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14110 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
14120 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
14130 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  e = TableFromInt
14140 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  Ptr(pVtab);.... 
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14160 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c  f (table != null
14170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 44 69            if (Di
141a0 73 63 6f 6e 6e 65 63 74 28 74 61 62 6c 65 29 20  sconnect(table) 
141b0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
141c0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
141d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
14200 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 74 61 62 6c 65 73 2e 52          tables.R
14230 65 6d 6f 76 65 28 70 56 74 61 62 29 3b 0d 0a 0d  emove(pVtab);...
14240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14250 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
14260 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
14270 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
14280 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14290 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
142a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
142b0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
142c0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
142d0 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
142e0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
142f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14300 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14320 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70   NOTE: At this p
14330 6f 69 6e 74 2c 20 74 68 65 72 65 20 69 73 20 6e  oint, there is n
14340 6f 20 77 61 79 20 74 6f 20 72 65 70 6f 72 74 20  o way to report 
14350 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..     
14360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14370 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 62 61      condition ba
14380 63 6b 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72  ck to the caller
14390 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
143a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
143b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
143c0 6f 67 67 69 6e 67 20 66 61 63 69 6c 69 74 79 20  ogging facility 
143d0 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20  instead...      
143e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14400 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
14410 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14420 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4c 6f            if (Lo
14430 67 45 78 63 65 70 74 69 6f 6e 73 29 0d 0a 20 20  gExceptions)..  
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
14470 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
14480 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52  e(SQLiteBase.COR
14490 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20  _E_EXCEPTION,.. 
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
144c0 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  g.Format(Culture
144d0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
144e0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74    "Caught except
14510 69 6f 6e 20 69 6e 20 5c 22 78 44 69 73 63 6f 6e  ion in \"xDiscon
14520 6e 65 63 74 5c 22 20 6d 65 74 68 6f 64 3a 20 7b  nect\" method: {
14530 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
14560 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
14570 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
145a0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
145b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
145c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
145d0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
145e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
145f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14600 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
14610 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
14620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14630 20 20 46 72 65 65 54 61 62 6c 65 28 70 56 74 61    FreeTable(pVta
14640 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
14650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14660 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
14670 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
14680 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
14690 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
146a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
146e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
146f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14700 20 78 44 65 73 74 72 6f 79 28 0d 0a 20 20 20 20   xDestroy(..    
14710 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
14720 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
14730 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
14740 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
14750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
14780 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65  le table = Table
14790 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62  FromIntPtr(pVtab
147a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
147b0 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20        if (table 
147c0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
147d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 69 66 20 28 44 65 73 74 72 6f 79 28 74 61 62   if (Destroy(tab
14800 6c 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  le) == SQLiteErr
14810 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
14850 61 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ables != null)..
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
14880 65 73 2e 52 65 6d 6f 76 65 28 70 56 74 61 62 29  es.Remove(pVtab)
14890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
148b0 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
148c0 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20  ode.Ok;..       
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
14900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
14910 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
14920 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
14930 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
14940 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14970 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 74 20 74 68    // NOTE: At th
14980 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 72 65 20  is point, there 
14990 69 73 20 6e 6f 20 77 61 79 20 74 6f 20 72 65 70  is no way to rep
149a0 6f 72 74 20 74 68 65 20 65 72 72 6f 72 0d 0a 20  ort the error.. 
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
149c0 2f 20 20 20 20 20 20 20 63 6f 6e 64 69 74 69 6f  /       conditio
149d0 6e 20 62 61 63 6b 20 74 6f 20 74 68 65 20 63 61  n back to the ca
149e0 6c 6c 65 72 3b 20 74 68 65 72 65 66 6f 72 65 2c  ller; therefore,
149f0 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..      
14a00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
14a10 20 20 20 6c 6f 67 67 69 6e 67 20 66 61 63 69 6c     logging facil
14a20 69 74 79 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20  ity instead...  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a50 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
14a60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14a80 20 28 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 29   (LogExceptions)
14a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
14ad0 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
14ae0 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
14af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
14b10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
14b20 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
14b30 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78        "Caught ex
14b60 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 78 44 65  ception in \"xDe
14b70 73 74 72 6f 79 5c 22 20 6d 65 74 68 6f 64 3a 20  stroy\" method: 
14b80 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
14bb0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
14bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14bf0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
14c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14c20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14c40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14c50 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
14c60 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
14c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14c80 20 20 20 46 72 65 65 54 61 62 6c 65 28 70 56 74     FreeTable(pVt
14c90 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
14ca0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14cb0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
14cc0 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
14cd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
14ce0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14d30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
14d40 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
14d50 65 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20  e xOpen(..      
14d60 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
14d70 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
14d80 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 75 72   ref IntPtr pCur
14d90 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
14da0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
14db0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
14de0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
14df0 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46  e table = TableF
14e00 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29  romIntPtr(pVtab)
14e10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14e20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21       if (table !
14e30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14e40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
14e70 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20  leCursor cursor 
14e80 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14ea0 66 20 28 4f 70 65 6e 28 74 61 62 6c 65 2c 20 72  f (Open(table, r
14eb0 65 66 20 63 75 72 73 6f 72 29 20 3d 3d 20 53 51  ef cursor) == SQ
14ec0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
14ed0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 69 66 20 28 63 75 72 73 6f 72 20 21 3d 20    if (cursor != 
14f10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
14f50 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72 54 6f  ursor = CursorTo
14f60 49 6e 74 50 74 72 28 63 75 72 73 6f 72 29 3b 0d  IntPtr(cursor);.
14f70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14f90 66 20 28 70 43 75 72 73 6f 72 20 21 3d 20 49 6e  f (pCursor != In
14fa0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14ff0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
15000 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok;..         
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
15090 72 72 6f 72 28 70 56 74 61 62 2c 0d 0a 20 20 20  rror(pVtab,..   
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 22 6e 6f 20 6e 61 74 69 76 65 20 63 75 72 73   "no native curs
150d0 6f 72 20 77 61 73 20 63 72 65 61 74 65 64 22 29  or was created")
150e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
15180 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 20 20 20 22 6e 6f 20 6d 61 6e 61          "no mana
151b0 67 65 64 20 63 75 72 73 6f 72 20 77 61 73 20 63  ged cursor was c
151c0 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 20  reated");..     
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
151f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15220 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
15230 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
15240 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
15250 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
15260 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15270 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
15280 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
15290 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
152a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
152b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
152c0 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
152d0 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
152e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
152f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15330 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15340 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
15350 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f  teErrorCode xClo
15360 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
15370 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
15380 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
15390 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
153a0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
153b0 74 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tab = IntPtr.Zer
153c0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
153d0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
153e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
153f0 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61        pVtab = Ta
15400 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43  bleFromCursor(pC
15410 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
15420 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
15430 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
15440 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72  sor cursor = Cur
15450 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a  sorFromIntPtr(..
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73      pVtab, pCurs
15480 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
15490 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73          if (curs
154a0 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or != null)..   
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 69 66 20 28 43 6c 6f 73 65 28 63 75      if (Close(cu
154e0 72 73 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45  rsor) == SQLiteE
154f0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15530 28 63 75 72 73 6f 72 73 20 21 3d 20 6e 75 6c 6c  (cursors != null
15540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15560 75 72 73 6f 72 73 2e 52 65 6d 6f 76 65 28 70 43  ursors.Remove(pC
15570 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
155a0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
155d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
155e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
155f0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
15600 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
15610 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
15620 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
15630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15640 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
15650 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72  r(pVtab, e.ToStr
15660 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
15670 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15680 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
15690 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
156a0 20 20 20 20 20 20 20 20 20 20 20 20 46 72 65 65              Free
156b0 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b  Cursor(pCursor);
156c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
156d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
156e0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
156f0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
15700 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15760 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
15770 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 46  LiteErrorCode xF
15780 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
15790 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
157a0 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or,..           
157b0 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20   int idxNum,..  
157c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
157d0 20 69 64 78 53 74 72 2c 0d 0a 20 20 20 20 20 20   idxStr,..      
157e0 20 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d        int argc,.
157f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15800 50 74 72 5b 5d 20 61 72 67 76 0d 0a 20 20 20 20  Ptr[] argv..    
15810 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
15820 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15830 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
15840 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
15850 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
15860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15880 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72   pVtab = TableFr
15890 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72  omCursor(pCursor
158a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
158b0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
158c0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
158d0 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72 46 72  ursor = CursorFr
158e0 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
15900 56 74 61 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d  Vtab, pCursor);.
15910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15920 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 21 3d     if (cursor !=
15930 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15960 66 20 28 46 69 6c 74 65 72 28 63 75 72 73 6f 72  f (Filter(cursor
15970 2c 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20  , idxNum,..     
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 72         SQLiteStr
159a0 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74  ing.StringFromUt
159b0 66 38 49 6e 74 50 74 72 28 69 64 78 53 74 72 29  f8IntPtr(idxStr)
159c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
159e0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 56 61 6c  QLiteMarshal.Val
159f0 75 65 41 72 72 61 79 46 72 6f 6d 49 6e 74 50 74  ueArrayFromIntPt
15a00 72 41 72 72 61 79 28 0d 0a 20 20 20 20 20 20 20  rArray(..       
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 20 20 20 20 20 61 72 67 76 29 29 20           argv)) 
15a30 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
15a40 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
15a50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
15a80 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
15a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15ac0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15ad0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
15ae0 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
15af0 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
15b00 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
15b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15b20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
15b30 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
15b40 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
15b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15b60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15b70 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15b80 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
15b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
15ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15be0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15bf0 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
15c00 72 72 6f 72 43 6f 64 65 20 78 4e 65 78 74 28 0d  rrorCode xNext(.
15c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15c20 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
15c30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
15c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15c50 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20     IntPtr pVtab 
15c60 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
15c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
15c80 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
15c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ca0 20 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65 46    pVtab = TableF
15cb0 72 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73 6f  romCursor(pCurso
15cc0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
15cd0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
15ce0 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
15cf0 63 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72 46  cursor = CursorF
15d00 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  romIntPtr(..    
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 70 56 74 61 62 2c 20 70 43 75 72 73 6f 72 29 3b  pVtab, pCursor);
15d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15d40 20 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 21      if (cursor !
15d50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15d60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 69 66 20 28 4e 65 78 74 28 63 75 72 73 6f 72 29  if (Next(cursor)
15d90 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
15da0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
15dd0 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15e00 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
15e10 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
15e20 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
15e30 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
15e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15e50 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
15e60 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
15e70 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
15e80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
15ea0 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
15eb0 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
15ec0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15ed0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15f20 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
15f30 78 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  xEof(..         
15f40 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
15f50 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
15f60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15f70 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
15f80 70 56 74 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a  pVtab = IntPtr.Z
15f90 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
15fa0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15fc0 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d 20          pVtab = 
15fd0 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28  TableFromCursor(
15fe0 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20  pCursor);....   
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
16000 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
16010 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 43  ursor cursor = C
16020 75 72 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28  ursorFromIntPtr(
16030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16040 20 20 20 20 20 20 70 56 74 61 62 2c 20 70 43 75        pVtab, pCu
16050 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
16060 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
16070 72 73 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  rsor != null).. 
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 72 65 74 75 72 6e 20 45 6f 66 28 63 75     return Eof(cu
160a0 72 73 6f 72 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  rsor) ? 1 : 0;..
160b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
160c0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
160d0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
160e0 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
160f0 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
16100 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16110 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
16120 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
16130 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
16140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16150 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
16160 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20  urn 1;..        
16170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
16180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
161d0 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72  private SQLiteEr
161e0 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
161f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
16200 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
16210 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
16220 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
16230 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
16240 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
16250 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
16260 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
16270 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74 72 2e   pVtab = IntPtr.
16280 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
16290 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
162a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
162b0 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d           pVtab =
162c0 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72   TableFromCursor
162d0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20  (pCursor);....  
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
162f0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
16300 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20  Cursor cursor = 
16310 43 75 72 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72  CursorFromIntPtr
16320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16330 20 20 20 20 20 20 20 70 56 74 61 62 2c 20 70 43         pVtab, pC
16340 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
16350 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
16360 75 72 73 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ursor != null)..
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16390 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
163a0 74 65 78 74 20 63 6f 6e 74 65 78 74 20 3d 20 6e  text context = n
163b0 65 77 20 53 51 4c 69 74 65 43 6f 6e 74 65 78 74  ew SQLiteContext
163c0 28 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20  (pContext);.... 
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 72 65 74 75 72 6e 20 43 6f 6c 75 6d 6e     return Column
163f0 28 63 75 72 73 6f 72 2c 20 63 6f 6e 74 65 78 74  (cursor, context
16400 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
16410 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16430 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
16440 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
16450 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
16460 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
16470 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16480 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
16490 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e  eError(pVtab, e.
164a0 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
164b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
164c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
164d0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
164e0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
164f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
16500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16550 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
16560 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64  ErrorCode xRowId
16570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
16580 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a  ntPtr pCursor,..
16590 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
165a0 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20  long rowId..    
165b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
165c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
165d0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
165e0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
165f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
16600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
16610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16620 20 70 56 74 61 62 20 3d 20 54 61 62 6c 65 46 72   pVtab = TableFr
16630 6f 6d 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72  omCursor(pCursor
16640 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16650 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
16660 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
16670 75 72 73 6f 72 20 3d 20 43 75 72 73 6f 72 46 72  ursor = CursorFr
16680 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  omIntPtr(..     
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
166a0 56 74 61 62 2c 20 70 43 75 72 73 6f 72 29 3b 0d  Vtab, pCursor);.
166b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
166c0 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 21 3d     if (cursor !=
166d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
166e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
166f0 72 6e 20 52 6f 77 49 64 28 63 75 72 73 6f 72 2c  rn RowId(cursor,
16700 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20   ref rowId);..  
16710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16720 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
16730 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
16740 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
16750 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
16760 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16770 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
16780 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e  eError(pVtab, e.
16790 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
167a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
167b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
167c0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
167d0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
167e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
167f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16830 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16840 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
16850 45 72 72 6f 72 43 6f 64 65 20 78 55 70 64 61 74  ErrorCode xUpdat
16860 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
16870 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
16880 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
16890 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
168a0 20 20 20 49 6e 74 50 74 72 20 61 70 44 61 74 61     IntPtr apData
168b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
168c0 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20  ef long rowId.. 
168d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
168e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
168f0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
16900 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16910 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
16920 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
16930 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  e = TableFromInt
16940 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  Ptr(pVtab);.... 
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16960 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c  f (table != null
16970 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16980 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16990 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
169a0 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 20 3d  Value[] values =
169b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169c0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
169d0 4d 61 72 73 68 61 6c 2e 56 61 6c 75 65 41 72 72  Marshal.ValueArr
169e0 61 79 46 72 6f 6d 53 69 7a 65 41 6e 64 49 6e 74  ayFromSizeAndInt
169f0 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 6e 44 61 74 61 2c 20 61 70 44 61 74 61 29    nData, apData)
16a20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16a30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16a40 55 70 64 61 74 65 28 74 61 62 6c 65 2c 20 76 61  Update(table, va
16a50 6c 75 65 73 2c 20 72 65 66 20 72 6f 77 49 64 29  lues, ref rowId)
16a60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16a80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16a90 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
16aa0 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75  n e) /* NOTE: Mu
16ab0 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f  st catch ALL. */
16ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
16ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ae0 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
16af0 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67  Vtab, e.ToString
16b00 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
16b10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16b20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
16b30 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
16b40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
16b50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16ba0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
16bb0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
16bc0 65 20 78 42 65 67 69 6e 28 0d 0a 20 20 20 20 20  e xBegin(..     
16bd0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
16be0 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
16bf0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
16c00 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
16c10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
16c30 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
16c40 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46  e table = TableF
16c50 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29  romIntPtr(pVtab)
16c60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16c70 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21       if (table !
16c80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16ca0 75 72 6e 20 42 65 67 69 6e 28 74 61 62 6c 65 29  urn Begin(table)
16cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
16cd0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
16ce0 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
16cf0 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
16d00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
16d20 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
16d30 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  b, e.ToString())
16d40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16d60 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
16d70 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
16d80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16d90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16de0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
16df0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
16e00 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20  Sync(..         
16e10 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
16e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
16e30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16e40 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
16e50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16e60 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16e70 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
16e80 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49  ble = TableFromI
16e90 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d  ntPtr(pVtab);...
16ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16eb0 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75   if (table != nu
16ec0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16ed0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16ee0 53 79 6e 63 28 74 61 62 6c 65 29 3b 0d 0a 20 20  Sync(table);..  
16ef0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16f00 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
16f10 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
16f20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
16f30 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
16f40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16f50 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
16f60 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e  eError(pVtab, e.
16f70 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
16f80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16f90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16fa0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
16fb0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
16fc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
16fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17010 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17020 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
17030 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6d 6d 69  ErrorCode xCommi
17040 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17050 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
17060 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
17070 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17080 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
17090 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
170a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
170b0 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
170c0 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50   = TableFromIntP
170d0 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  tr(pVtab);....  
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
170f0 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29   (table != null)
17100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17110 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6d        return Com
17120 6d 69 74 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  mit(table);..   
17130 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17140 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
17150 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
17160 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
17170 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
17180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17190 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
171a0 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
171b0 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
171c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
171d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
171e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
171f0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
17200 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
17210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17250 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17260 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
17270 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61  rrorCode xRollba
17280 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
17290 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
172a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
172b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
172c0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
172d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
172e0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
172f0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
17300 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  e = TableFromInt
17310 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  Ptr(pVtab);.... 
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17330 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c  f (table != null
17340 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 6f         return Ro
17360 6c 6c 62 61 63 6b 28 74 61 62 6c 65 29 3b 0d 0a  llback(table);..
17370 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17380 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
17390 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
173a0 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
173b0 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
173c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
173d0 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
173e0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
173f0 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
17400 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17410 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
17420 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
17430 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
17440 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17450 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17490 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
174a0 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
174b0 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
174c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
174d0 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
174e0 20 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c         int nArg,
174f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
17500 74 50 74 72 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20  tPtr zName,..   
17510 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
17520 69 74 65 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  iteCallback call
17530 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
17540 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
17550 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
17560 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
17570 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17580 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
17590 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
175a0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
175b0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
175c0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
175d0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
175e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
175f0 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17620 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
17630 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 3d 20  tion function = 
17640 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17660 28 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  (FindFunction(..
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
17690 65 2c 20 6e 41 72 67 2c 0d 0a 20 20 20 20 20 20  e, nArg,..      
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69        SQLiteStri
176c0 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74 66  ng.StringFromUtf
176d0 38 49 6e 74 50 74 72 28 7a 4e 61 6d 65 29 2c 0d  8IntPtr(zName),.
176e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
17700 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 66 20 70   function, ref p
17710 43 6c 69 65 6e 74 44 61 74 61 29 29 0d 0a 20 20  ClientData))..  
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17750 28 66 75 6e 63 74 69 6f 6e 20 21 3d 20 6e 75 6c  (function != nul
17760 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 20 20 63 61 6c 6c 62             callb
177a0 61 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 2e 53  ack = function.S
177b0 63 61 6c 61 72 43 61 6c 6c 62 61 63 6b 3b 0d 0a  calarCallback;..
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
177e0 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  rn 1;..         
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17810 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
17860 72 72 6f 72 28 70 56 74 61 62 2c 20 22 6e 6f 20  rror(pVtab, "no 
17870 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65  function was cre
17880 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20  ated");..       
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
178b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
178c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
178d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
178e0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
178f0 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20  Exception e) /* 
17900 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68  NOTE: Must catch
17910 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20   ALL. */..      
17920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17930 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
17940 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e  eError(pVtab, e.
17950 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
17960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17970 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17980 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n 0;..        }.
17990 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
179a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
179f0 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
17a00 72 43 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a  rCode xRename(..
17a10 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17a20 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
17a30 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e         IntPtr zN
17a40 65 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ew..            
17a50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
17a60 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
17a70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
17a90 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
17aa0 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
17ab0 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
17ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17ad0 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
17ae0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
17b10 65 74 75 72 6e 20 52 65 6e 61 6d 65 28 74 61 62  eturn Rename(tab
17b20 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
17b40 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
17b50 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 7a  FromUtf8IntPtr(z
17b60 4e 65 77 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  New));..        
17b70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17b90 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
17ba0 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54  eption e) /* NOT
17bb0 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c  E: Must catch AL
17bc0 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  L. */..         
17bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17be0 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
17bf0 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53  ror(pVtab, e.ToS
17c00 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
17c10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17c20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
17c30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
17c40 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
17c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
17c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
17cb0 72 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72  rivate SQLiteErr
17cc0 6f 72 43 6f 64 65 20 78 53 61 76 65 70 6f 69 6e  orCode xSavepoin
17cd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17ce0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
17cf0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
17d00 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
17d10 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
17d20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17d30 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
17d40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17d50 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
17d60 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
17d70 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
17d80 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
17d90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
17da0 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 72 65 74 75 72 6e 20 53 61 76 65 70 6f     return Savepo
17dd0 69 6e 74 28 74 61 62 6c 65 2c 20 69 53 61 76 65  int(table, iSave
17de0 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  point);..       
17df0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17e00 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
17e10 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
17e20 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
17e30 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
17e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17e50 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
17e60 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72  r(pVtab, e.ToStr
17e70 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
17e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17e90 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
17ea0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
17eb0 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
17ec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
17ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
17f20 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
17f30 43 6f 64 65 20 78 52 65 6c 65 61 73 65 28 0d 0a  Code xRelease(..
17f40 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17f50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
17f60 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76 65         int iSave
17f70 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  point..         
17f80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
17f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
17fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17fc0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
17fd0 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c  ble table = Tabl
17fe0 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61  eFromIntPtr(pVta
17ff0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
18000 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65         if (table
18010 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18030 65 74 75 72 6e 20 52 65 6c 65 61 73 65 28 74 61  eturn Release(ta
18040 62 6c 65 2c 20 69 53 61 76 65 70 6f 69 6e 74 29  ble, iSavepoint)
18050 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
18060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
18070 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
18080 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
18090 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
180a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
180c0 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
180d0 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  b, e.ToString())
180e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
180f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18100 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
18110 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
18120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18130 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18180 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
18190 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
181a0 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
181b0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
181c0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
181d0 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
181e0 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
181f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18200 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
18210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
18230 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
18240 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72   table = TableFr
18250 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b  omIntPtr(pVtab);
18260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18270 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d      if (table !=
18280 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18290 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
182a0 72 6e 20 52 6f 6c 6c 62 61 63 6b 54 6f 28 74 61  rn RollbackTo(ta
182b0 62 6c 65 2c 20 69 53 61 76 65 70 6f 69 6e 74 29  ble, iSavepoint)
182c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
182e0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
182f0 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
18300 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
18310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
18330 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  tTableError(pVta
18340 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  b, e.ToString())
18350 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
18360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18370 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
18380 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
18390 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
183a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
183b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
183c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18400 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
18410 6f 6e 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65  on ISQLiteManage
18420 64 4d 6f 64 75 6c 65 20 4d 65 6d 62 65 72 73 0d  dModule Members.
18430 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
18440 20 62 6f 6f 6c 20 64 65 63 6c 61 72 65 64 3b 0d   bool declared;.
18450 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
18460 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 44 65 63  virtual bool Dec
18470 6c 61 72 65 64 0d 0a 20 20 20 20 20 20 20 20 7b  lared..        {
18480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
18490 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
184a0 64 28 29 3b 20 72 65 74 75 72 6e 20 64 65 63 6c  d(); return decl
184b0 61 72 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ared; }..       
184c0 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
184d0 74 20 7b 20 64 65 63 6c 61 72 65 64 20 3d 20 76  t { declared = v
184e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
184f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
18500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18540 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18550 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
18560 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70  name;..        p
18570 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74  ublic virtual st
18580 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20  ring Name..     
18590 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
185a0 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
185b0 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
185c0 6e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  name; }..       
185d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
185e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18630 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74   public abstract
18640 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18650 20 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20   Create(..      
18660 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
18670 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
18680 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
18690 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
186a0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
186b0 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
186c0 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
186d0 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
186e0 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
186f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
18700 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
18710 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
18720 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
18730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
18780 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
18790 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e  teErrorCode Conn
187a0 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ect(..          
187b0 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
187c0 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
187d0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
187e0 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d  tr pClientData,.
187f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
18800 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 2c  ing[] arguments,
18810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
18820 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
18830 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
18840 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
18850 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
18860 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
18870 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
188a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
188b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
188c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
188d0 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
188e0 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65  rorCode BestInde
188f0 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x(..            
18900 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
18910 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
18920 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64         SQLiteInd
18930 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20  ex index..      
18940 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
18950 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18980 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
189a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
189b0 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
189c0 6f 72 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63  orCode Disconnec
189d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
189e0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
189f0 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  le table..      
18a00 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
18a10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18a60 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
18a70 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
18a80 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79 28 0d  orCode Destroy(.
18a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
18aa0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
18ab0 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  table..         
18ac0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
18ad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18b20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
18b30 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
18b40 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20 20 20  ode Open(..     
18b50 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
18b60 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
18b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
18b80 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
18b90 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
18ba0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
18bb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
18bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18c10 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
18c20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18c30 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
18c40 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18c50 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
18c60 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
18c70 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18cd0 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63    public abstrac
18ce0 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
18cf0 65 20 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20  e Filter(..     
18d00 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
18d10 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
18d20 63 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  cursor,..       
18d30 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 4e 75       int indexNu
18d40 6d 62 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  mber,..         
18d50 20 20 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53     string indexS
18d60 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
18d70 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
18d80 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  ] values..      
18d90 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
18da0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18df0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
18e00 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
18e10 6f 72 43 6f 64 65 20 4e 65 78 74 28 0d 0a 20 20  orCode Next(..  
18e20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
18e30 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
18e40 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20  or cursor..     
18e50 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
18e60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18eb0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
18ec0 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 45 6f 66  bstract bool Eof
18ed0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
18ee0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
18ef0 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
18f00 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
18f10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f60 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
18f70 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c  lic abstract SQL
18f80 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c  iteErrorCode Col
18f90 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
18fa0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
18fb0 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
18fc0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
18fd0 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 20 63 6f  SQLiteContext co
18fe0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20  ntext,..        
18ff0 20 20 20 20 69 6e 74 20 69 6e 64 65 78 0d 0a 20      int index.. 
19000 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19020 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
19070 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
19080 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 77 49  teErrorCode RowI
19090 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
190a0 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
190b0 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
190c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
190d0 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20  f long rowId..  
190e0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
190f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19120 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
19140 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
19150 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
19160 65 45 72 72 6f 72 43 6f 64 65 20 55 70 64 61 74  eErrorCode Updat
19170 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
19180 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
19190 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
191a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
191b0 75 65 5b 5d 20 76 61 6c 75 65 73 2c 0d 0a 20 20  ue[] values,..  
191c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f            ref lo
191d0 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20  ng rowId..      
191e0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
191f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19240 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
19250 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
19260 6f 72 43 6f 64 65 20 42 65 67 69 6e 28 0d 0a 20  orCode Begin(.. 
19270 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
19280 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
19290 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
192a0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
192b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
19300 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63    public abstrac
19310 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
19320 65 20 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20  e Sync(..       
19330 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
19340 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20  alTable table.. 
19350 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19360 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
193c0 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
193d0 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6d 6d  teErrorCode Comm
193e0 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
193f0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
19400 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ble table..     
19410 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
19420 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19470 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
19480 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
19490 72 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b  rorCode Rollback
194a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
194b0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
194c0 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  e table..       
194d0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
194e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
194f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19530 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73        public abs
19540 74 72 61 63 74 20 62 6f 6f 6c 20 46 69 6e 64 46  tract bool FindF
19550 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
19560 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
19570 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
19580 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
19590 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
195a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
195b0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
195c0 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
195d0 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69  eFunction functi
195e0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
195f0 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69   ref IntPtr pCli
19600 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20  entData..       
19610 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
19620 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19670 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73        public abs
19680 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
19690 72 43 6f 64 65 20 52 65 6e 61 6d 65 28 0d 0a 20  rCode Rename(.. 
196a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
196b0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
196c0 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
196d0 20 20 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65    string newName
196e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
196f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
19700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19740 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
19750 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53  ublic abstract S
19760 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
19770 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20  avepoint(..     
19780 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
19790 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
197a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
197b0 74 20 73 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20  t savepoint..   
197c0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
197d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
197e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19820 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
19830 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
19840 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
19850 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
19860 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
19870 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
19880 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70         int savep
19890 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  oint..          
198a0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
198b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19900 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
19910 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
19920 64 65 20 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a  de RollbackTo(..
19930 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
19940 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
19950 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
19960 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74     int savepoint
19970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
19980 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
19990 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
199a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
199f0 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
19a00 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
19a10 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
19a20 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
19a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19a40 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
19a50 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
19a60 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
19a70 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
19a80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19a90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
19aa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
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 0d 0a  //////////////..
19af0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
19b00 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
19b10 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
19b20 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
19b30 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
19b40 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
19b50 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
19b60 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
19b70 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
19b80 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
19b90 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SED..           
19ba0 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19bd0 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
19be0 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
19bf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19c00 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
19c10 4c 69 74 65 4d 6f 64 75 6c 65 29 2e 4e 61 6d 65  LiteModule).Name
19c20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19c30 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
19c40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19ca0 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
19cb0 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73  tual void Dispos
19cc0 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67  e(bool disposing
19cd0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
19ce0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
19cf0 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
19d00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d10 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64           //if (d
19d20 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
19d30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20  //////////..    
19d80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19d90 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
19da0 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
19db0 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
19dc0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
19dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19df0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19e00 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
19e10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19e50 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
19e60 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
19e70 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
19e80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19eb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
19ec0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
19ed0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
19f00 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 69 73  hods.sqlite3_dis
19f10 70 6f 73 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20  pose_module(..  
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 72 65 66 20 6e 61 74 69 76 65        ref native
19f40 4d 6f 64 75 6c 65 29 3b 0d 0a 20 20 20 20 20 20  Module);..      
19f50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
19f70 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
19f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19fa0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19fe0 28 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 29 0d  (LogExceptions).
19ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
1a030 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  g.LogMessage(SQL
1a040 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58  iteBase.COR_E_EX
1a050 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  CEPTION,..      
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1a080 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
1a090 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
1a0a0 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78 63       "Caught exc
1a0d0 65 70 74 69 6f 6e 20 69 6e 20 5c 22 44 69 73 70  eption in \"Disp
1a0e0 6f 73 65 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30  ose\" method: {0
1a0f0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1a120 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1a170 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1a180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1a1b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a1c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a1d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1a1f0 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a210 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a220 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1a230 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1a290 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
1a2a0 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 4d          ~SQLiteM
1a2b0 6f 64 75 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  odule()..       
1a2c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a2d0 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
1a2e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1a2f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1a300 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1a310 65 67 69 6f 6e 0d 0a 7d 0d 0a                    egion..}..