System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4c1d90e511912cd9acdba75063039cd778205859:


0000: ef bb bf 2f 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 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own risk!.. ***
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 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70  *****/....namesp
0130: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0140: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69  SQLite..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73  ng System;..  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 20 20 75 73 69 6e 67 20 53 79 73  es;..  using Sys
0190: 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e  tem.Collections.
01a0: 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75 73 69 6e  Generic;..  usin
01b0: 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69  g System.Globali
01c0: 7a 61 74 69 6f 6e 3b 0d 0a 0d 0a 23 69 66 20 21  zation;....#if !
01d0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
01e0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
01f0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
0200: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
0210: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0220: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0230: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0240: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0250: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 75 73 65  back(IntPtr puse
0260: 72 2c 20 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c  r, int err_code,
0270: 20 49 6e 74 50 74 72 20 6d 65 73 73 61 67 65 29   IntPtr message)
0280: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0290: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
02a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
02b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
02c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
02d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
02e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
02f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0300: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0310: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0320: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0330: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0340: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
0350: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0360: 68 65 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  he opaque pointe
0370: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 75 73  r returned to us
0380: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 20 70   by the sqlite p
0390: 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 2f 2f 2f  rovider..    ///
03a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
03b0: 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74   protected SQLit
03c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
03d0: 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f  e _sql;..    pro
03e0: 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66  tected string _f
03f0: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72  ileName;..    pr
0400: 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73  otected bool _us
0410: 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74  ePool;..    prot
0420: 65 63 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56  ected int _poolV
0430: 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69 66 20 21  ersion;....#if !
0440: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
0450: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70  FRAMEWORK..    p
0460: 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69  rivate bool _bui
0470: 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65  ldingSchema;..#e
0480: 6e 64 69 66 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ndif..    /// <s
0490: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
04a0: 20 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65   The user-define
04b0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69  d functions regi
04c0: 73 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63  stered on this c
04d0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
04e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
04f0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c     protected SQL
0500: 69 74 65 46 75 6e 63 74 69 6f 6e 5b 5d 20 5f 66  iteFunction[] _f
0510: 75 6e 63 74 69 6f 6e 73 41 72 72 61 79 3b 0d 0a  unctionsArray;..
0520: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  ..    internal S
0530: 51 4c 69 74 65 33 28 53 51 4c 69 74 65 44 61 74  QLite3(SQLiteDat
0540: 65 46 6f 72 6d 61 74 73 20 66 6d 74 29 0d 0a 20  eFormats fmt).. 
0550: 20 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74 29       : base(fmt)
0560: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a  ..    {..    }..
0570: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0580: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
0590: 73 70 6f 73 65 28 62 6f 6f 6c 20 62 44 69 73 70  spose(bool bDisp
05a0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20  osing)..    {.. 
05b0: 20 20 20 20 20 69 66 20 28 62 44 69 73 70 6f 73       if (bDispos
05c0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 43 6c  ing)..        Cl
05d0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ose();..    }...
05e0: 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74  .    // It isn't
05f0: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c   necessary to cl
0600: 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69  eanup any functi
0610: 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69 73 74  ons we've regist
0620: 65 72 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f  ered.  If the co
0630: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  nnection..    //
0640: 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f   goes to the poo
0650: 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72 72 65  l and is resurre
0660: 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72  cted later, re-r
0670: 65 67 69 73 74 65 72 65 64 20 66 75 6e 63 74 69  egistered functi
0680: 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69  ons will overwri
0690: 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70  te the..    // p
06a0: 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e  revious function
06b0: 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46 75  s.  The SQLiteFu
06c0: 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64  nctionCookieHand
06d0: 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72  le will take car
06e0: 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d  e of freeing unm
06f0: 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72  anaged..    // r
0700: 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69  esources belongi
0710: 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ng to the previo
0720: 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20  usly-registered 
0730: 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  functions...    
0740: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
0750: 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a  e void Close()..
0760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
0770: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a  (_sql != null)..
0780: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0790: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
07a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
07b0: 20 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 2e       SQLiteBase.
07c0: 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  ResetConnection(
07d0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  _sql);..        
07e0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
07f0: 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65  onPool.Add(_file
0800: 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f  Name, _sql, _poo
0810: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20  lVersion);..    
0820: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
0830: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  lse..          _
0840: 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  sql.Dispose();..
0850: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0860: 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20   _sql = null;.. 
0870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
0880: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
0890: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
08a0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
08b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
08c0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
08d0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
08e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
08f0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
0900: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
0910: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
0920: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
0930: 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56   SQLite3.SQLiteV
0940: 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d  ersion;..      }
0950: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
0960: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
0970: 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73  tring SQLiteVers
0980: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
0990: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
09a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
09b0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
09c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
09d0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
09e0: 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  on(), -1);..    
09f0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
0a00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
0a10: 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d  ide bool AutoCom
0a20: 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mit..    {..    
0a30: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
0a40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
0a50: 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c  sAutocommit(_sql
0a60: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
0a70: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
0a80: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
0a90: 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a  Changes..    {..
0aa0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
0ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
0ac0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
0ad0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
0ae0: 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 20  hanges(_sql);.. 
0af0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
0b00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0b10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
0b20: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
0b30: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
0b40: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
0b50: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
0b60: 74 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73  t config options
0b70: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65  ...    /// We de
0b80: 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69  pend on auto ini
0b90: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72  tialization to r
0ba0: 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  ecover...    ///
0bb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0bc0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
0bd0: 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63  turns a result c
0be0: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
0bf0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
0c00: 72 69 64 65 20 69 6e 74 20 53 68 75 74 64 6f 77  ride int Shutdow
0c10: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
0c20: 20 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73      int rc = Uns
0c30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
0c40: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
0c50: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  n();..        re
0c60: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
0c70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0c80: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70  override void Op
0c90: 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c  en(string strFil
0ca0: 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 4f 70 65  ename, SQLiteOpe
0cb0: 6e 46 6c 61 67 73 45 6e 75 6d 20 66 6c 61 67 73  nFlagsEnum flags
0cc0: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
0cd0: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
0ce0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
0cf0: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
0d00: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
0d10: 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65    _usePool = use
0d20: 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20  Pool;..      if 
0d30: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
0d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 6c   {..        _fil
0d50: 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e  eName = strFilen
0d60: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 73  ame;..        _s
0d70: 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ql = SQLiteConne
0d80: 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65  ctionPool.Remove
0d90: 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61  (strFilename, ma
0da0: 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f  xPoolSize, out _
0db0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 20  poolVersion);.. 
0dc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
0dd0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
0de0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
0df0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a      IntPtr db;..
0e00: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
0e10: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
0e20: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
0e30: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
0e40: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
0e50: 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e  (ToUTF8(strFilen
0e60: 61 6d 65 29 2c 20 28 69 6e 74 29 66 6c 61 67 73  ame), (int)flags
0e70: 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 23 65 6c 73  , out db);..#els
0e80: 65 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  e..        int n
0e90: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
0ea0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
0eb0: 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74  pen_v2(ToUTF8(st
0ec0: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20  rFilename), out 
0ed0: 64 62 2c 20 28 69 6e 74 29 66 6c 61 67 73 2c 20  db, (int)flags, 
0ee0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 23  IntPtr.Zero);..#
0ef0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
0f00: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
0f10: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
0f20: 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  ion(n, null);...
0f30: 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20  .        _sql = 
0f40: 64 62 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  db;..      }..  
0f50: 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63      // Bind func
0f60: 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f  tions to this co
0f70: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e  nnection.  If an
0f80: 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74  y previous funct
0f90: 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65  ions of the same
0fa0: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20   name..      // 
0fb0: 77 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75  were already bou
0fc0: 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77  nd, then the new
0fd0: 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63   bindings replac
0fe0: 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20  e the old...    
0ff0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72 61    _functionsArra
1000: 79 20 3d 20 53 51 4c 69 74 65 46 75 6e 63 74 69  y = SQLiteFuncti
1010: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
1020: 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 53  (this);..      S
1030: 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20  etTimeout(0);.. 
1040: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1050: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1060: 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a  id ClearPool()..
1070: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
1080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
1090: 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c  l.ClearPool(_fil
10a0: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
10b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10c0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
10d0: 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d  Timeout(int nTim
10e0: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a  eoutMS)..    {..
10f0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
1100: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1110: 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  s.sqlite3_busy_t
1120: 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20 6e 54 69  imeout(_sql, nTi
1130: 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20  meoutMS);..     
1140: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
1150: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1160: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
1170: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
1180: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1190: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
11a0: 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53 74 61  l Step(SQLiteSta
11b0: 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20  tement stmt)..  
11c0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
11d0: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
11e0: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
11f0: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
1200: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
1210: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
1220: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d  ..      uint tim
1230: 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74  eout = (uint)(st
1240: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d  mt._command._com
1250: 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30  mandTimeout * 10
1260: 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68  00);....      wh
1270: 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20  ile (true)..    
1280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d    {..        n =
1290: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65  hods.sqlite3_ste
12b0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
12c0: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
12d0: 20 69 66 20 28 6e 20 3d 3d 20 31 30 30 29 20 72   if (n == 100) r
12e0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
12f0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 30       if (n == 10
1300: 31 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  1) return false;
1310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1320: 6e 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  n > 0)..        
1330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  {..          int
1340: 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   r;....         
1350: 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63   // An error occ
1360: 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74  urred, attempt t
1370: 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74  o reset the stat
1380: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72  ement.  If the r
1390: 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61  eset worked beca
13a0: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
13b0: 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73     // schema has
13c0: 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79   changed, re-try
13d0: 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e   the step again.
13e0: 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20    If it errored 
13f0: 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20  our because the 
1400: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
1410: 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64      // is locked
1420: 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72  , then keep retr
1430: 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63  ying until the c
1440: 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f  ommand timeout o
1450: 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
1460: 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74    r = Reset(stmt
1470: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1480: 69 66 20 28 72 20 3d 3d 20 30 29 0d 0a 20 20 20  if (r == 0)..   
1490: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
14a0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
14b0: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
14c0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
14d0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14e0: 28 72 20 3d 3d 20 36 20 7c 7c 20 72 20 3d 3d 20  (r == 6 || r == 
14f0: 35 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d  5) && stmt._comm
1500: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  and != null) // 
1510: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 7c 7c  SQLITE_LOCKED ||
1520: 20 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a 20 20   SQLITE_BUSY..  
1530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1540: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
1550: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
1560: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
1570: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
1580: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
1590: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
15b0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
15c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
15d0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
15e0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
15f0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
1600: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
1610: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1620: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
1630: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
1640: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
1650: 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20   timeout)..     
1660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1670: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1680: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1690: 6e 28 72 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(r, SQLiteLastE
16a0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
16b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
16d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16e0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
16f0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
1700: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
1710: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
1720: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
1730: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
1740: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
1750: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
1760: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1770: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
17a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17b0: 64 65 20 69 6e 74 20 52 65 73 65 74 28 53 51 4c  de int Reset(SQL
17c0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
17d0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
17e0: 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21   int n;....#if !
17f0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
1800: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
1810: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1820: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
1830: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
1840: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d  e_stmt);..#else.
1850: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
1860: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1870: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d  qlite3_reset(stm
1880: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
1890: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
18a0: 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65    // If the sche
18b0: 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20  ma changed, try 
18c0: 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69  and re-prepare i
18d0: 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  t..      if (n =
18e0: 3d 20 31 37 29 20 2f 2f 20 53 51 4c 49 54 45 5f  = 17) // SQLITE_
18f0: 53 43 48 45 4d 41 0d 0a 20 20 20 20 20 20 7b 0d  SCHEMA..      {.
1900: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
1910: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
1920: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
1930: 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20  string str;..   
1940: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
1950: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
1960: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
1970: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
1980: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
1990: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
19a0: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
19b0: 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72 29   1000), out str)
19c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
19d0: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
19e0: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
19f0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
1a00: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
1a10: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
1a20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
1a30: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
1a40: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
1a50: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
1a60: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
1a70: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
1a80: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ne..          st
1a90: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mt._sqlite_stmt 
1aa0: 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74  = tmp._sqlite_st
1ab0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  mt;..          t
1ac0: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mp._sqlite_stmt 
1ad0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
1ae0: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
1af0: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
1b00: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
1b10: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
1b20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b30: 20 72 65 74 75 72 6e 20 2d 31 3b 20 2f 2f 20 52   return -1; // R
1b40: 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74  eset was OK, wit
1b50: 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d  h schema change.
1b60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
1b70: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36 20  else if (n == 6 
1b80: 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 53 51  || n == 5) // SQ
1b90: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 7c 7c 20 53  LITE_LOCKED || S
1ba0: 51 4c 49 54 45 5f 42 55 53 59 0d 0a 20 20 20 20  QLITE_BUSY..    
1bb0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
1bc0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
1bd0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
1be0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1bf0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
1c00: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f       return 0; /
1c20: 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e  / We reset OK, n
1c30: 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  o schema changes
1c40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1c50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1c60: 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 4c 61   string SQLiteLa
1c70: 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b  stError()..    {
1c80: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ..      return S
1c90: 51 4c 69 74 65 42 61 73 65 2e 53 51 4c 69 74 65  QLiteBase.SQLite
1ca0: 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 29 3b  LastError(_sql);
1cb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1cc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1cd0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
1ce0: 20 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43   Prepare(SQLiteC
1cf0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73  onnection cnn, s
1d00: 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51  tring strSql, SQ
1d10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72  LiteStatement pr
1d20: 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d  evious, uint tim
1d30: 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69  eoutMS, out stri
1d40: 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20  ng strRemain).. 
1d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
1d60: 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72  tr stmt = IntPtr
1d70: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e  .Zero;..      In
1d80: 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74  tPtr ptr = IntPt
1d90: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69  r.Zero;..      i
1da0: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
1db0: 20 20 20 69 6e 74 20 6e 20 3d 20 31 37 3b 0d 0a     int n = 17;..
1dc0: 20 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65        int retrie
1dd0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 62 79  s = 0;..      by
1de0: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
1df0: 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20  strSql);..      
1e00: 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73 20  string typedefs 
1e10: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53  = null;..      S
1e20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 63  QLiteStatement c
1e30: 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  md = null;..    
1e40: 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e    Random rnd = n
1e50: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  ull;..      uint
1e60: 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69   starttick = (ui
1e70: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
1e80: 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20  ickCount;....   
1e90: 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64     GCHandle hand
1ea0: 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c  le = GCHandle.Al
1eb0: 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54  loc(b, GCHandleT
1ec0: 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20  ype.Pinned);..  
1ed0: 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20      IntPtr psql 
1ee0: 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50  = handle.AddrOfP
1ef0: 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a  innedObject();..
1f00: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c   {..        whil
1f20: 65 20 28 28 6e 20 3d 3d 20 31 37 20 7c 7c 20 6e  e ((n == 17 || n
1f30: 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20 35 29   == 6 || n == 5)
1f40: 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 33 29   && retries < 3)
1f50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
1f60: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
1f70: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  D..          n =
1f80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
1fa0: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71  pare_interop(_sq
1fb0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
1fc0: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
1fd0: 20 6f 75 74 20 70 74 72 2c 20 6f 75 74 20 6c 65   out ptr, out le
1fe0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
1ff0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
2000: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2010: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73  lite3_prepare(_s
2020: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
2030: 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74  th - 1, out stmt
2040: 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a 20 20 20  , out ptr);..   
2050: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
2060: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
2070: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31        if (n == 1
2080: 37 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  7)..            
2090: 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20  retries++;..    
20a0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
20b0: 20 3d 3d 20 31 29 0d 0a 20 20 20 20 20 20 20 20   == 1)..        
20c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20d0: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
20e0: 61 72 65 28 53 51 4c 69 74 65 4c 61 73 74 45 72  are(SQLiteLastEr
20f0: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
2100: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
2110: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
2120: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
2130: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
2140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
2160: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
2170: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2190: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
21a0: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
21b0: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
21c0: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
21d0: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
21e0: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2200: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
2210: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
2220: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2230: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
2240: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2250: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
2260: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
2270: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
2280: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22a0: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
22b0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
22c0: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
22d0: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
2300: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
2310: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2320: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
2330: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2340: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
2350: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
2360: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2370: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
2380: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
2390: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
23a0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
23b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
23c0: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
23d0: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
23e0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c  ring.Compare(SQL
23f0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  iteLastError(), 
2400: 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c  0, "no such tabl
2410: 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c  e: TEMP.SCHEMA",
2420: 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f   0, 26, StringCo
2430: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2440: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
2450: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2470: 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d  strRemain = "";.
2480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
2490: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
24a0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
24b0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
24c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
24e0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
24f0: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
2500: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
2510: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
2520: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
2530: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
2540: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
2550: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
2560: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
2590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a0: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
25b0: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d0: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
25e0: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
25f0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
2600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2620: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
2630: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
2640: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
2650: 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  out strRemain);.
2660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2670: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
2680: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
2690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26b0: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
26c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26d0: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
26e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2700: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
2710: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
2720: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2730: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
2740: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
2760: 20 69 66 20 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e   if (n == 6 || n
2770: 20 3d 3d 20 35 29 20 2f 2f 20 4c 6f 63 6b 65 64   == 5) // Locked
2780: 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c   -- delay a smal
2790: 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20  l amount before 
27a0: 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  retrying..      
27b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27c0: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
27d0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
27e0: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
27f0: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
2800: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
2810: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
2820: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
2830: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
2840: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
2850: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
2860: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
2870: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
2880: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
2890: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
28a0: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
28b0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
28c0: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
28d0: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20  eoutMS)..       
28e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2900: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
2910: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
2920: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
2930: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2940: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2950: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2960: 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69        // Otherwi
2970: 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72  se sleep for a r
2980: 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  andom amount of 
2990: 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73  time up to 150ms
29a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b0: 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67  System.Threading
29c0: 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e  .Thread.Sleep(rn
29d0: 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b  d.Next(1, 150));
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29f0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
2a00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a10: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
2a20: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
2a30: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
2a40: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
2a50: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d  ..        strRem
2a60: 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ain = UTF8ToStri
2a70: 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d  ng(ptr, len);...
2a80: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d  .        if (stm
2a90: 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t != IntPtr.Zero
2aa0: 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69  ) cmd = new SQLi
2ab0: 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73  teStatement(this
2ac0: 2c 20 73 74 6d 74 2c 20 73 74 72 53 71 6c 2e 53  , stmt, strSql.S
2ad0: 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53  ubstring(0, strS
2ae0: 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52  ql.Length - strR
2af0: 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70  emain.Length), p
2b00: 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20  revious);....   
2b10: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
2b20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
2b30: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
2b40: 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  {..        handl
2b50: 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20  e.Free();..     
2b60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2b70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2b80: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  de void Bind_Dou
2b90: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
2ba0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2bb0: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
2bc0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
2bd0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2be0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2bf0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
2c00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2c10: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
2c20: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
2c30: 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  mt, index, value
2c40: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
2c50: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
2c60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2c70: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
2c80: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
2c90: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
2ca0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
2cb0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
2cc0: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
2cd0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
2ce0: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
2cf0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
2d00: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2d10: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
2d20: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
2d30: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2d40: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76  int index, int v
2d50: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
2d60: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
2d70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2d80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
2d90: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
2da0: 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  mt, index, value
2db0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
2dc0: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
2dd0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
2de0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
2df0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
2e00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2e10: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
2e20: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
2e30: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
2e40: 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75  index, long valu
2e50: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
2e60: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2e70: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2e80: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
2e90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2ea0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
2eb0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
2ec0: 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  t, index, value)
2ed0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2ee0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
2ef0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2f00: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
2f10: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
2f20: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
2f30: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
2f40: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
2f50: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
2f60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
2f70: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
2f80: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
2f90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2fa0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
2fb0: 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  d_Text(SQLiteSta
2fc0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2fd0: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
2fe0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
2ff0: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
3000: 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20  oUTF8(value);.. 
3010: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
3020: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3030: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
3040: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
3050: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 62 2c 20  stmt, index, b, 
3060: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
3070: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
3080: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
3090: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
30a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
30b0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
30c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
30d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
30e0: 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69  void Bind_DateTi
30f0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
3100: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
3110: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
3120: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
3130: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
3140: 28 64 74 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  (dt);..      int
3150: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
3160: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3170: 5f 62 69 6e 64 5f 74 65 78 74 28 73 74 6d 74 2e  _bind_text(stmt.
3180: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3190: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
31a0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
31b0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  1));..      if (
31c0: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
31d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
31e0: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
31f0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
3200: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3210: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
3220: 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61  d_Blob(SQLiteSta
3230: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
3240: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
3250: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
3260: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
3270: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3280: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
3290: 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
32a0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 62  e_stmt, index, b
32b0: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
32c0: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
32d0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
32e0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
32f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3300: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
3310: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3320: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3330: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3340: 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74   Bind_Null(SQLit
3350: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3360: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
3370: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
3380: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3390: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
33a0: 6e 64 5f 6e 75 6c 6c 28 73 74 6d 74 2e 5f 73 71  nd_null(stmt._sq
33b0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
33c0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
33d0: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
33e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
33f0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
3400: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
3410: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3420: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
3430: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
3440: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
3450: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
3460: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3470: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3480: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
3490: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
34a0: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
34b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
34c0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
34d0: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
34e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
34f0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3500: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
3510: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3520: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
3530: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3540: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
3550: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3560: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
3570: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
3580: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
3590: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
35a0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
35b0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
35c0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
35d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35e0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
35f0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 74 6d  rameter_name(stm
3600: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
3610: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
3620: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
3630: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3640: 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61  ride int Bind_Pa
3650: 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53  ramIndex(SQLiteS
3660: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
3670: 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29  tring paramName)
3680: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
3690: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
36a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
36b0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
36c0: 5f 69 6e 64 65 78 28 73 74 6d 74 2e 5f 73 71 6c  _index(stmt._sql
36d0: 69 74 65 5f 73 74 6d 74 2c 20 54 6f 55 54 46 38  ite_stmt, ToUTF8
36e0: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 20  (paramName));.. 
36f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3700: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
3710: 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51  t ColumnCount(SQ
3720: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3730: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3740: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
3750: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3760: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
3770: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
3780: 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tmt);..    }....
3790: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
37a0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
37b0: 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  umnName(SQLiteSt
37c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
37d0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
37e0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
37f0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
3800: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
3810: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3820: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3830: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
3840: 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  umn_name_interop
3850: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
3860: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
3870: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
3880: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
3890: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
38a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
38b0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
38c0: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
38d0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
38e0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
38f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3900: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70  nal override Typ
3910: 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
3920: 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
3930: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
3940: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
3950: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
3960: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3970: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
3980: 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  n_type(stmt._sql
3990: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
39a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
39b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
39c0: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
39d0: 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
39e0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
39f0: 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66  dex, out TypeAff
3a00: 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
3a10: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
3a20: 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51  nt len;..#if !SQ
3a30: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3a40: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
3a50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3a60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
3a70: 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65  mn_decltype_inte
3a80: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
3a90: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
3aa0: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
3ab0: 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d        len = -1;.
3ac0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
3ad0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3ae0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
3af0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
3b00: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
3b10: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66   index);..#endif
3b20: 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74  ..      nAffinit
3b30: 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  y = ColumnAffini
3b40: 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  ty(stmt, index);
3b50: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
3b60: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
3b70: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
3b80: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
3b90: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
3ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  {..        strin
3bb0: 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79  g[] ar = stmt.Ty
3bc0: 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a  peDefinitions;..
3bd0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20 21          if (ar !
3be0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
3c00: 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e   (index < ar.Len
3c10: 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d  gth && ar[index]
3c20: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
3c30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
3c40: 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
3c50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
3c60: 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
3c70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73  ;....        //s
3c80: 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79  witch (nAffinity
3c90: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a  )..        //{..
3ca0: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
3cb0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
3cc0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t64:..        //
3cd0: 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47 49      return "BIGI
3ce0: 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NT";..        //
3cf0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
3d00: 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
3d10: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
3d20: 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20  n "DOUBLE";..   
3d30: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
3d40: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
3d50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
3d60: 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a  return "BLOB";..
3d70: 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61          //  defa
3d80: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ult:..        //
3d90: 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58 54      return "TEXT
3da0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d  ";..        //}.
3db0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3dc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3dd0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
3de0: 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53  umnIndex(SQLiteS
3df0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
3e00: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
3e10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3e20: 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f  int x = ColumnCo
3e30: 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
3e40: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
3e50: 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d   0; n < x; n++).
3e60: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3e70: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
3e80: 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c  pare(columnName,
3e90: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74   ColumnName(stmt
3ea0: 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , n), StringComp
3eb0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
3ec0: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
3ed0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3ee0: 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n n;..      }.. 
3ef0: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
3f00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3f10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3f20: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69  string ColumnOri
3f30: 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65  ginalName(SQLite
3f40: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3f50: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
3f60: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
3f70: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
3f80: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
3f90: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
3fa0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
3fb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3fc0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
3fd0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
3fe0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
3ff0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
4000: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4010: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4020: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4030: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4040: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
4050: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
4060: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
4070: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
4080: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4090: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
40a0: 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61  ing ColumnDataba
40b0: 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  seName(SQLiteSta
40c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
40d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
40e0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
40f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
4100: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
4110: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4120: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4130: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4140: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
4150: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
4160: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
4170: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
4180: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4190: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
41a0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
41b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
41c0: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
41d0: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
41e0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
41f0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
4200: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4210: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
4220: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
4230: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
4240: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
4250: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
4260: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
4270: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
4280: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
4290: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
42a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
42b0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
42c0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65  _table_name_inte
42d0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
42e0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
42f0: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
4300: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
4310: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4320: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4330: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4340: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
4350: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4360: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
4370: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
4380: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4390: 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d  rride void Colum
43a0: 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
43b0: 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
43c0: 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
43d0: 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69  column, out stri
43e0: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ng dataType, out
43f0: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
4400: 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f  equence, out boo
4410: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62  l notNull, out b
4420: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
4430: 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  out bool autoInc
4440: 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a  rement)..    {..
4450: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74        IntPtr dat
4460: 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20  aTypePtr;..     
4470: 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50   IntPtr collSeqP
4480: 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  tr;..      int n
4490: 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  notNull;..      
44a0: 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b  int nprimaryKey;
44b0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74  ..      int naut
44c0: 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 69 6e 74  oInc;..      int
44d0: 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64   n;..      int d
44e0: 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  tLen;..      int
44f0: 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21   csLen;....#if !
4500: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4510: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4520: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4530: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
4540: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74  umn_metadata_int
4550: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
4560: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
4570: 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
4580: 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
4590: 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74  dataTypePtr, out
45a0: 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74   collSeqPtr, out
45b0: 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e   nnotNull, out n
45c0: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
45d0: 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74  nautoInc, out dt
45e0: 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b  Len, out csLen);
45f0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64  ..#else..      d
4600: 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20  tLen = -1;..    
4610: 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d    csLen = -1;...
4620: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4630: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4640: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
4650: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71  umn_metadata(_sq
4660: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
4670: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
4680: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
4690: 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65  n), out dataType
46a0: 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71  Ptr, out collSeq
46b0: 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c  Ptr, out nnotNul
46c0: 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b  l, out nprimaryK
46d0: 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63  ey, out nautoInc
46e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
46f0: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
4700: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4710: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
4720: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
4730: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
4740: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
4750: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
4760: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
4770: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
4780: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
4790: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
47a0: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
47b0: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
47c0: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
47d0: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
47e0: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
47f0: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
4800: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
4810: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4820: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4830: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
4840: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
4850: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
4860: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
4870: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
4880: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4890: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
48a0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
48b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
48c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
48d0: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
48e0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
48f0: 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  x);..#else..    
4900: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
4910: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4920: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  lumn_double_inte
4930: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
4940: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
4950: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
4960: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
4970: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
4980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4990: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e  erride int GetIn
49a0: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
49b0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
49c0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
49d0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
49e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
49f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
4a00: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4a10: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
4a20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4a30: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
4a40: 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
4a50: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
4a60: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
4a70: 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61  {..      long va
4a80: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
4a90: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
4aa0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
4ab0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
4ac0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4ad0: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d  column_int64(stm
4ae0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
4af0: 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a  index);..#else..
4b00: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
4b10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4b20: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69  3_column_int64_i
4b30: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
4b40: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
4b50: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
4b60: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
4b70: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
4b80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4b90: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
4ba0: 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53   GetText(SQLiteS
4bb0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4bc0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4bd0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4be0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
4bf0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
4c00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4c10: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4c20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4c30: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
4c40: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
4c50: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
4c60: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
4c70: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
4c80: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4c90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4ca0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
4cb0: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
4cc0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
4cd0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
4ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4cf0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
4d00: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
4d10: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
4d20: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
4d30: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
4d40: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
4d50: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
4d60: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
4d70: 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
4d80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4d90: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4da0: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
4db0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4dc0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
4dd0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4de0: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
4df0: 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
4e00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4e10: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
4e20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
4e30: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
4e40: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
4e50: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4e60: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
4e70: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
4e80: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
4e90: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
4ea0: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
4eb0: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
4ec0: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
4ed0: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
4ee0: 70 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ptr;..      int 
4ef0: 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
4f00: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
4f10: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6c 65  th;....      nle
4f20: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
4f30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4f40: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
4f50: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
4f60: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 2f  index);..      /
4f70: 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
4f80: 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
4f90: 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
4fa0: 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
4fb0: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
4fc0: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
4fd0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
4fe0: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
4ff0: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
5000: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
5010: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
5020: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
5030: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
5040: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
5050: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
5060: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
5070: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
5080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 74 72    {..        ptr
5090: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
50a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
50b0: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
50c0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
50d0: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 4d  dex);..        M
50e0: 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74  arshal.Copy((Int
50f0: 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34  Ptr)(ptr.ToInt64
5100: 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  () + nDataOffset
5110: 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  ), bDest, nStart
5120: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
5130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
5140: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
5150: 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d     nCopied = 0;.
5160: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
5170: 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
5180: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5190: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
51a0: 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28  e long GetChars(
51b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
51c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
51d0: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
51e0: 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20  , char[] bDest, 
51f0: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
5200: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
5210: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b  .      int nlen;
5220: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
5230: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
5240: 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73  ..      string s
5250: 74 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d  tr = GetText(stm
5260: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
5270: 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e    nlen = str.Len
5280: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  gth;....      if
5290: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
52a0: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
52b0: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
52c0: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
52d0: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
52e0: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
52f0: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
5300: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
5310: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
5320: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
5330: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
5340: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
5350: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
5360: 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54         str.CopyT
5370: 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  o(nDataOffset, b
5380: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
5390: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65  opied);..      e
53a0: 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b  lse nCopied = 0;
53b0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
53c0: 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
53d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
53e0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
53f0: 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  sNull(SQLiteStat
5400: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
5410: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
5420: 20 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c       return (Col
5430: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
5440: 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65  , index) == Type
5450: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d  Affinity.Null);.
5460: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5470: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5480: 69 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75  int AggregateCou
5490: 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  nt(IntPtr contex
54a0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
54b0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
54c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
54d0: 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f  te3_aggregate_co
54e0: 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  unt(context);.. 
54f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5500: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
5510: 69 64 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f  id CreateFunctio
5520: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63  n(string strFunc
5530: 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c  tion, int nArgs,
5540: 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65   bool needCollSe
5550: 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  q, SQLiteCallbac
5560: 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61  k func, SQLiteCa
5570: 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c  llback funcstep,
5580: 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c   SQLiteFinalCall
5590: 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d  back funcfinal).
55a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
55b0: 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  t n;....#if !SQL
55c0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
55d0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
55e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
55f0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
5600: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
5610: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
5620: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
5630: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
5640: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
5650: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
5660: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
5670: 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20   1 : 0);..      
5680: 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20  if (n == 0) n = 
5690: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
56a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
56b0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
56c0: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
56d0: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
56e0: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
56f0: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
5700: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
5710: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
5720: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
5730: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
5740: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5750: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
5760: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
5770: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
5780: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
5790: 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
57a0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
57b0: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20   funcfinal);..  
57c0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 30 29 20      if (n == 0) 
57d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
57e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
57f0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5800: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
5810: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
5820: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
5830: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
5840: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23  , funcfinal);..#
5850: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
5860: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
5870: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5880: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
5890: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
58a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
58b0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
58c0: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
58d0: 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
58e0: 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
58f0: 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
5900: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29  ollation func16)
5910: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
5920: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
5930: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5940: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
5950: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
5960: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
5970: 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  2, IntPtr.Zero, 
5980: 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20  func16);..      
5990: 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20  if (n == 0) n = 
59a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
59b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
59c0: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
59d0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
59e0: 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50  lation), 1, IntP
59f0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d  tr.Zero, func);.
5a00: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
5a10: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
5a20: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
5a30: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
5a40: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5a50: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5a60: 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
5a70: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
5a80: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
5a90: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
5aa0: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73  ontext, string s
5ab0: 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20  1, string s2).. 
5ac0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
5ad0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5ae0: 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
5af0: 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
5b00: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
5b10: 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
5b20: 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
5b30: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
5b40: 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
5b50: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
5b60: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
5b70: 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
5b80: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
5b90: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
5ba0: 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
5bb0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
5bc0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
5bd0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
5be0: 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
5bf0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
5c00: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
5c10: 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
5c20: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
5c30: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
5c40: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
5c50: 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
5c60: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
5c70: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
5c80: 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
5c90: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
5ca0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
5cb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
5cc0: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
5cd0: 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20  ytes(s1);..     
5ce0: 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
5cf0: 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d  GetBytes(s2);...
5d00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
5d10: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5d20: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
5d30: 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f  t_collcompare(co
5d40: 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
5d50: 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
5d60: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
5d70: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
5d80: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
5d90: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
5da0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5db0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5dc0: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
5dd0: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
5de0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
5df0: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
5e00: 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
5e10: 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
5e20: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
5e30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5e40: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
5e50: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
5e60: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
5e70: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
5e80: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
5e90: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
5ea0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
5eb0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
5ec0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
5ed0: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
5ee0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
5ef0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
5f00: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
5f10: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
5f20: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
5f30: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
5f40: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
5f50: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
5f60: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
5f70: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
5f80: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
5f90: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
5fa0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
5fb0: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
5fc0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
5fd0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
5fe0: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
5ff0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
6000: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
6010: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
6020: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
6030: 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
6040: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
6050: 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
6060: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
6070: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6080: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
6090: 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74  collcompare(cont
60a0: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
60b0: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
60c0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
60d0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
60e0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
60f0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
6100: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6110: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43  ernal override C
6120: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
6130: 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71   GetCollationSeq
6140: 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63  uence(SQLiteFunc
6150: 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74  tion func, IntPt
6160: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
6170: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
6180: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43  TANDARD..      C
6190: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
61a0: 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61   seq = new Colla
61b0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d  tionSequence();.
61c0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
61d0: 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b  .      int type;
61e0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b  ..      int enc;
61f0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
6200: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6210: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
6220: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 28 63  ontext_collseq(c
6230: 6f 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65  ontext, out type
6240: 2c 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c  , out enc, out l
6250: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  en);....      if
6260: 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71   (p != null) seq
6270: 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74  .Name = UTF8ToSt
6280: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
6290: 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20       seq.Type = 
62a0: 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e  (CollationTypeEn
62b0: 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  um)type;..      
62c0: 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63  seq._func = func
62d0: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63  ;..      seq.Enc
62e0: 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69  oding = (Collati
62f0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65  onEncodingEnum)e
6300: 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  nc;....      ret
6310: 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d  urn seq;..#else.
6320: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
6330: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
6340: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
6350: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
6360: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6370: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
6380: 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50  mValueBytes(IntP
6390: 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f  tr p, int nDataO
63a0: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
63b0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
63c0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
63d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
63e0: 74 72 20 70 74 72 3b 0d 0a 20 20 20 20 20 20 69  tr ptr;..      i
63f0: 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  nt nlen;..      
6400: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
6410: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
6420: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
6430: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6440: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
6450: 29 3b 0d 0a 20 20 20 20 20 20 70 74 72 20 3d 20  );..      ptr = 
6460: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6470: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
6480: 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20  e_blob(p);....  
6490: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
64a0: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
64b0: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  en;....      if 
64c0: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
64d0: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
64e0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
64f0: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
6500: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
6510: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
6520: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
6530: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
6540: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
6550: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
6560: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 4d 61 72   0)..        Mar
6570: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
6580: 72 29 28 70 74 72 2e 54 6f 49 6e 74 33 32 28 29  r)(ptr.ToInt32()
6590: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
65a0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
65b0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
65c0: 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20   else nCopied = 
65d0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
65e0: 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
65f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6600: 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
6610: 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
6620: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
6630: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
6640: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a   double value;..
6650: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6660: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6670: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
6680: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6690: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
66a0: 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65  double(ptr);..#e
66b0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
66c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
66d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
66e0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
66f0: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
6700: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
6710: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
6720: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6730: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
6740: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32  tParamValueInt32
6750: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
6760: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
6770: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
6780: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
6790: 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20  lue_int(ptr);.. 
67a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
67b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
67c0: 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
67d0: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72  Int64(IntPtr ptr
67e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
67f0: 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69  Int64 value;..#i
6800: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6810: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6820: 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
6830: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6840: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
6850: 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  t64(ptr);..#else
6860: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
6870: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6880: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f  te3_value_int64_
6890: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
68a0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
68b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
68c0: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
68d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
68e0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
68f0: 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
6900: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
6910: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
6920: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
6930: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
6940: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
6950: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
6960: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
6970: 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f  alue_text_intero
6980: 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c  p(ptr, out len),
6990: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
69a0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
69b0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
69c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
69d0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
69e0: 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  ptr), -1);..#end
69f0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
6a00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6a10: 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
6a20: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70  GetParamValueTyp
6a30: 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
6a40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
6a50: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
6a60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
6a70: 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d  alue_type(ptr);.
6a80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6a90: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6aa0: 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28  void ReturnBlob(
6ab0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
6ac0: 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
6ad0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
6ae0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6af0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
6b00: 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  lob(context, val
6b10: 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  ue, value.Length
6b20: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
6b30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6b40: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6b50: 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62   void ReturnDoub
6b60: 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  le(IntPtr contex
6b70: 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  t, double value)
6b80: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
6b90: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6ba0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55  AMEWORK..      U
6bb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6bc0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
6bd0: 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74  t_double(context
6be0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
6bf0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
6c00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6c10: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
6c20: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
6c30: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
6c40: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
6c50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6c60: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
6c70: 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63  rnError(IntPtr c
6c80: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
6c90: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
6ca0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
6cb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6cc0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
6cd0: 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
6ce0: 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ue), value.Lengt
6cf0: 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
6d00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6d10: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
6d20: 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
6d30: 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  ext, int value).
6d40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
6d50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6d60: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
6d70: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61  _int(context, va
6d80: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
6d90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6da0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
6db0: 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f  nInt64(IntPtr co
6dc0: 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75  ntext, long valu
6dd0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
6de0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6df0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6e00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6e10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
6e20: 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
6e30: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  t, value);..#els
6e40: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
6e50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6e60: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
6e70: 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  4_interop(contex
6e80: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
6e90: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
6ea0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6eb0: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
6ec0: 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f  rnNull(IntPtr co
6ed0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
6ee0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
6ef0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6f00: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e  _result_null(con
6f10: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
6f20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6f30: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
6f40: 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f  rnText(IntPtr co
6f50: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
6f60: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
6f70: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
6f80: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20  UTF8(value);..  
6f90: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
6fa0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6fb0: 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74  result_text(cont
6fc0: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
6fd0: 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  e), b.Length - 1
6fe0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
6ff0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7000: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7010: 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74   IntPtr Aggregat
7020: 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20  eContext(IntPtr 
7030: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
7040: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
7050: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7060: 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
7070: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
7080: 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  ext, 1);..    }.
7090: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  ...    /// Enabl
70a0: 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65  es or disabled e
70b0: 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63  xtended result c
70c0: 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79  odes returned by
70d0: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74   SQLite..    int
70e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
70f0: 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52  oid SetExtendedR
7100: 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20  esultCodes(bool 
7110: 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
7120: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
7130: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7140: 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
7150: 74 5f 63 6f 64 65 73 28 5f 73 71 6c 2c 20 28 62  t_codes(_sql, (b
7160: 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29  OnOff ? -1 : 0))
7170: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
7180: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
7190: 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  SQLite error cod
71a0: 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
71b0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 73  override int Res
71c0: 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
71d0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
71e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
71f0: 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ds.sqlite3_errco
7200: 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  de(_sql);..    }
7210: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
7220: 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
7230: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
7240: 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  de..    internal
7250: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 45 78   override int Ex
7260: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
7270: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
7280: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
7290: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
72a0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
72b0: 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
72c0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
72d0: 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
72e0: 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
72f0: 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
7300: 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
7310: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7320: 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 69 6e 74  d LogMessage(int
7330: 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
7340: 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
7350: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
7360: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7370: 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
7380: 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
7390: 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
73a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
73b0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
73c0: 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70  assword(byte[] p
73d0: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
73e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
73f0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7400: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7410: 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
7420: 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
7430: 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
7440: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
7450: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
7460: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
7470: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
7480: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7490: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
74a0: 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
74b0: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
74c0: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
74d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
74e0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
74f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7500: 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
7510: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
7520: 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
7530: 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
7540: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
7550: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
7560: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
7570: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7580: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
7590: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
75a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
75b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
75c0: 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b  id SetUpdateHook
75d0: 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c  (SQLiteUpdateCal
75e0: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
75f0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
7600: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7610: 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
7620: 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
7630: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
7640: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7650: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7660: 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53   SetCommitHook(S
7670: 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62  QLiteCommitCallb
7680: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
7690: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
76a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
76b0: 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28  te3_commit_hook(
76c0: 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
76d0: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
76e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
76f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
7700: 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  etTraceCallback(
7710: 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62  SQLiteTraceCallb
7720: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
7730: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
7740: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7750: 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20  te3_trace(_sql, 
7760: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
7770: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
7780: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7790: 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c  ide void SetRoll
77a0: 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52  backHook(SQLiteR
77b0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
77c0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
77d0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
77e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
77f0: 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73  rollback_hook(_s
7800: 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
7810: 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
7820: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
7830: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c  ry>..    /// All
7840: 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20  ows the setting 
7850: 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c  of a logging cal
7860: 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79  lback invoked by
7870: 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a   SQLite when a..
7880: 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e      /// log even
7890: 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20  t occurs.  Only 
78a0: 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  one callback may
78b0: 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c   be set.  If NUL
78c0: 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20  L is passed,..  
78d0: 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e    /// the loggin
78e0: 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e  g callback is un
78f0: 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20  registered...   
7900: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7910: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7920: 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20  name="func">The 
7930: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
7940: 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61  n to invoke.</pa
7950: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7960: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
7970: 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
7980: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
7990: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
79a0: 74 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b  t SetLogCallback
79b0: 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61  (SQLiteLogCallba
79c0: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
79d0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 63 20  .        int rc 
79e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
79f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
7a00: 6e 66 69 67 28 28 69 6e 74 29 53 51 4c 69 74 65  nfig((int)SQLite
7a10: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
7a20: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
7a30: 20 66 75 6e 63 2c 20 28 49 6e 74 50 74 72 29 30   func, (IntPtr)0
7a40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
7a50: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
7a60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7a70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70  y>..    /// Help
7a80: 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72  er function to r
7a90: 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e  etrieve a column
7aa0: 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e   of data from an
7ab0: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
7ac0: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
7ad0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7ae0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
7af0: 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74  t">The statement
7b00: 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20   being step()'d 
7b10: 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d  through</param>.
7b20: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7b30: 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
7b40: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
7b50: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
7b60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7b70: 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
7b80: 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
7b90: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
7ba0: 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
7bb0: 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
7bc0: 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
7bd0: 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
7be0: 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
7bf0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7c00: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
7c10: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
7c20: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
7c30: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
7c40: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
7c50: 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
7c60: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7c70: 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74  int index, SQLit
7c80: 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  eType typ)..    
7c90: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e  {..      if (IsN
7ca0: 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ull(stmt, index)
7cb0: 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e  ) return DBNull.
7cc0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79  Value;..      Ty
7cd0: 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d  peAffinity aff =
7ce0: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a   typ.Affinity;..
7cf0: 20 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e        Type t = n
7d00: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ull;....      if
7d10: 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62   (typ.Type != Db
7d20: 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20  Type.Object)..  
7d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
7d40: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
7d50: 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70  .SQLiteTypeToTyp
7d60: 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20  e(typ);..       
7d70: 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66   aff = TypeToAff
7d80: 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20  inity(t);..     
7d90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74   }....      swit
7da0: 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20  ch (aff)..      
7db0: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
7dc0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
7dd0: 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  b:..          if
7de0: 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
7df0: 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70  Type.Guid && typ
7e00: 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
7e10: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d  eAffinity.Text).
7e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7e30: 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74  urn new Guid(Get
7e40: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
7e50: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
7e60: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65   int n = (int)Ge
7e70: 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
7e80: 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
7e90: 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  0);..          b
7ea0: 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79  yte[] b = new by
7eb0: 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20  te[n];..        
7ec0: 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
7ed0: 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c   index, 0, b, 0,
7ee0: 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   n);....        
7ef0: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
7f00: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
7f10: 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20   n == 16)..     
7f20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
7f30: 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20  w Guid(b);....  
7f40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
7f50: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
7f60: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
7f70: 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20  eTime:..        
7f80: 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65    return GetDate
7f90: 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Time(stmt, index
7fa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
7fb0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
7fc0: 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
7fd0: 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
7fe0: 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65  return GetDouble
7ff0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
8000: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
8010: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8020: 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
8030: 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28  eType(GetDouble(
8040: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
8050: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
8060: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
8070: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
8080: 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
8090: 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  ll) return GetIn
80a0: 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
80b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
80c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
80d0: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
80e0: 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36  angeType(GetInt6
80f0: 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  4(stmt, index), 
8100: 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
8110: 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20     default:..   
8120: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
8130: 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
8140: 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  x);..      }..  
8150: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8160: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
8170: 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62   GetCursorForTab
8180: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
8190: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c  nt stmt, int db,
81a0: 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a   int rootPage)..
81b0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
81c0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
81d0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
81e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
81f0: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73  lite3_table_curs
8200: 6f 72 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  or(stmt._sqlite_
8210: 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61  stmt, db, rootPa
8220: 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ge);..#else..   
8230: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23     return -1;..#
8240: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
8250: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8260: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f  rride long GetRo
8270: 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c  wIdForCursor(SQL
8280: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8290: 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a  t, int cursor)..
82a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
82b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
82c0: 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a     long rowid;..
82d0: 20 20 20 20 20 20 69 6e 74 20 72 63 20 3d 20 55        int rc = U
82e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
82f0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f  ds.sqlite3_curso
8300: 72 5f 72 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71  r_rowid(stmt._sq
8310: 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f  lite_stmt, curso
8320: 72 2c 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a  r, out rowid);..
8330: 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
8340: 30 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b  0) return rowid;
8350: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
8360: 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   0;..#else..    
8370: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e    return 0;..#en
8380: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8390: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
83a0: 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65  ide void GetInde
83b0: 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49  xColumnExtendedI
83c0: 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62  nfo(string datab
83d0: 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65  ase, string inde
83e0: 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  x, string column
83f0: 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f  , out int sortMo
8400: 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72  de, out int onEr
8410: 72 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  ror, out string 
8420: 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
8430: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
8440: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
8450: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
8460: 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63  ll;..      int c
8470: 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  olllen;..      i
8480: 6e 74 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  nt rc;....      
8490: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
84a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
84b0: 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
84c0: 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
84d0: 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
84e0: 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
84f0: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
8500: 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20  , out sortMode, 
8510: 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  out onError, out
8520: 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c   coll, out colll
8530: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
8540: 72 63 20 21 3d 20 30 29 20 74 68 72 6f 77 20 6e  rc != 0) throw n
8550: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8560: 6f 6e 28 72 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20  on(rc, "");.... 
8570: 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
8580: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
8590: 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c  tring(coll, coll
85a0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
85b0: 20 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30      sortMode = 0
85c0: 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72  ;..      onError
85d0: 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c   = 2;..      col
85e0: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
85f0: 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64   "BINARY";..#end
8600: 69 66 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  if..    }..  }..
8610: 7d 0d 0a                                         }..