System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ae7b3525177bdd7caaee8e353b4a0544195b6307:


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 20 20 2f 2f 2f  zation;....  ///
01d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
01e0: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
01f0: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
0200: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
0210: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
0220: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
0230: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
0240: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
0250: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0260: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0270: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0280: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f  ase..  {..    //
0290: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
02a0: 20 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20   /// The opaque 
02b0: 70 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64  pointer returned
02c0: 20 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71   to us by the sq
02d0: 6c 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20  lite provider.. 
02e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
02f0: 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  >..    protected
0300: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
0310: 6e 48 61 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20  nHandle _sql;.. 
0320: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 72     protected str
0330: 69 6e 67 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a  ing _fileName;..
0340: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 62 6f      protected bo
0350: 6f 6c 20 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20  ol _usePool;..  
0360: 20 20 70 72 6f 74 65 63 74 65 64 20 69 6e 74 20    protected int 
0370: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d  _poolVersion;...
0380: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
0390: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
03a0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
03b0: 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d  l _buildingSchem
03c0: 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  a;..#endif..    
03d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
03e0: 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d     /// The user-
03f0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
0400: 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20  s registered on 
0410: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  this connection.
0420: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0430: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ry>..    protect
0440: 65 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ed SQLiteFunctio
0450: 6e 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72  n[] _functionsAr
0460: 72 61 79 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ray;....    inte
0470: 72 6e 61 6c 20 53 51 4c 69 74 65 33 28 53 51 4c  rnal SQLite3(SQL
0480: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
0490: 6d 74 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73  mt)..      : bas
04a0: 65 28 66 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  e(fmt)..    {.. 
04b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
04c0: 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76  ected override v
04d0: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
04e0: 20 62 44 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   bDisposing)..  
04f0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 62    {..      if (b
0500: 44 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  Disposing)..    
0510: 20 20 20 20 43 6c 6f 73 65 28 29 3b 0d 0a 20 20      Close();..  
0520: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74    }....    // It
0530: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
0540: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
0550: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
0560: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
0570: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
0580: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
0590: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
05a0: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
05b0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
05c0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
05d0: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
05e0: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
05f0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
0600: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
0610: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
0620: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
0630: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
0640: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
0650: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
0660: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
0670: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
0680: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
0690: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
06a0: 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  se()..    {..   
06b0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
06c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ull)..      {.. 
06d0: 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
06e0: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ool)..        {.
06f0: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
0700: 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65  eBase.ResetConne
0710: 63 74 69 6f 6e 28 5f 73 71 6c 29 3b 0d 0a 20 20  ction(_sql);..  
0720: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
0730: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
0740: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
0750: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
0760: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0770: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
0780: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
0790: 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e();..      }...
07a0: 0a 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75  .      _sql = nu
07b0: 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ll;..    }....  
07c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
07d0: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
07e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
07f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
0800: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
0810: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
0820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
0830: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
0840: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
0850: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
0860: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0870: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
0880: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
0890: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
08a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
08b0: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
08c0: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
08d0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
08e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
08f0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
0900: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
0910: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
0920: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
0930: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
0940: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
0950: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41   override bool A
0960: 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b  utoCommit..    {
0970: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
0980: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
0990: 74 75 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69  turn IsAutocommi
09a0: 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  t(_sql);..      
09b0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
09c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
09d0: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
09e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
09f0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
0a00: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
0a10: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
0a20: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
0a30: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
0a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
0a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0a60: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
0a70: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
0a80: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
0a90: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
0aa0: 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f  fferent config o
0ab0: 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ptions...    ///
0ac0: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
0ad0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
0ae0: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
0af0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
0b10: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
0b20: 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
0b30: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
0b40: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 53  l override int S
0b50: 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b  hutdown()..    {
0b60: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 63  ..        int rc
0b70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
0b80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
0b90: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
0ba0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
0bb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
0bc0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
0bd0: 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20  oid Open(string 
0be0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c  strFilename, SQL
0bf0: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
0c00: 20 66 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50   flags, int maxP
0c10: 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73  oolSize, bool us
0c20: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20  ePool)..    {.. 
0c30: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d       if (_sql !=
0c40: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a   null) return;..
0c50: 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
0c60: 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20   = usePool;..   
0c70: 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d     if (usePool).
0c80: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
0c90: 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74    _fileName = st
0ca0: 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20  rFilename;..    
0cb0: 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74      _sql = SQLit
0cc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
0cd0: 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61  Remove(strFilena
0ce0: 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  me, maxPoolSize,
0cf0: 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   out _poolVersio
0d00: 6e 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  n);..      }....
0d10: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
0d20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
0d30: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
0d40: 20 64 62 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c   db;....#if !SQL
0d50: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
0d60: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
0d70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
0d80: 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  s.sqlite3_open_i
0d90: 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74  nterop(ToUTF8(st
0da0: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 28 69 6e 74  rFilename), (int
0db0: 29 66 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b  )flags, out db);
0dc0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
0dd0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
0de0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
0df0: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55  ite3_open_v2(ToU
0e00: 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29  TF8(strFilename)
0e10: 2c 20 6f 75 74 20 64 62 2c 20 28 69 6e 74 29 66  , out db, (int)f
0e20: 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72  lags, IntPtr.Zer
0e30: 6f 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  o);..#endif..   
0e40: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
0e50: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
0e60: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
0e70: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f  l);....        _
0e80: 73 71 6c 20 3d 20 64 62 3b 0d 0a 20 20 20 20 20  sql = db;..     
0e90: 20 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e   }..      // Bin
0ea0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74  d functions to t
0eb0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  his connection. 
0ec0: 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73   If any previous
0ed0: 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68   functions of th
0ee0: 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20  e same name..   
0ef0: 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61     // were alrea
0f00: 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74  dy bound, then t
0f10: 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20  he new bindings 
0f20: 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e  replace the old.
0f30: 0d 0a 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f  ..      _functio
0f40: 6e 73 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65  nsArray = SQLite
0f50: 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e  Function.BindFun
0f60: 63 74 69 6f 6e 73 28 74 68 69 73 29 3b 0d 0a 20  ctions(this);.. 
0f70: 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28       SetTimeout(
0f80: 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  0);..    }....  
0f90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
0fa0: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
0fb0: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
0fc0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
0fd0: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
0fe0: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
0ff0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1000: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1010: 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e  id SetTimeout(in
1020: 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20  t nTimeoutMS).. 
1030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
1040: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
1050: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1060: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71  busy_timeout(_sq
1070: 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  l, nTimeoutMS);.
1080: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
1090: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
10a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
10b0: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
10c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
10d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10e0: 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  de bool Step(SQL
10f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1100: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
1110: 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 52   int n;..      R
1120: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
1130: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
1140: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
1150: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
1160: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69  Count;..      ui
1170: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69  nt timeout = (ui
1180: 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e  nt)(stmt._comman
1190: 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75  d._commandTimeou
11a0: 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20  t * 1000);....  
11b0: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
11c0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
11d0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
11e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11f0: 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71  e3_step(stmt._sq
1200: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20  lite_stmt);.... 
1210: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
1220: 31 30 30 29 20 72 65 74 75 72 6e 20 74 72 75 65  100) return true
1230: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
1240: 20 3d 3d 20 31 30 31 29 20 72 65 74 75 72 6e 20   == 101) return 
1250: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1260: 20 20 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20    if (n > 0)..  
1270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1280: 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20     int r;....   
1290: 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72         // An err
12a0: 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74  or occurred, att
12b0: 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74 68  empt to reset th
12c0: 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66  e statement.  If
12d0: 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65   the reset worke
12e0: 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20  d because the.. 
12f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65           // sche
1300: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ma has changed, 
1310: 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70 20  re-try the step 
1320: 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72  again.  If it er
1330: 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75 73  rored our becaus
1340: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a  e the database..
1350: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20            // is 
1360: 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65  locked, then kee
1370: 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c  p retrying until
1380: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d   the command tim
1390: 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20  eout occurs...  
13a0: 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73 65          r = Rese
13b0: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
13c0: 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 30        if (r == 0
13d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
13e0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
13f0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
1400: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
1410: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ...          els
1420: 65 20 69 66 20 28 28 72 20 3d 3d 20 36 20 7c 7c  e if ((r == 6 ||
1430: 20 72 20 3d 3d 20 35 29 20 26 26 20 73 74 6d 74   r == 5) && stmt
1440: 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c  ._command != nul
1450: 6c 29 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43  l) // SQLITE_LOC
1460: 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55  KED || SQLITE_BU
1470: 53 59 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  SY..          {.
1480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
1490: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
14a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
14b0: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
14c0: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
14d0: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
14e0: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
14f0: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
1500: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
1510: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
1520: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
1530: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
1540: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
1550: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
1560: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
1570: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
1580: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
1590: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d  tick > timeout).
15a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
15c0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
15d0: 63 65 70 74 69 6f 6e 28 72 2c 20 53 51 4c 69 74  ception(r, SQLit
15e0: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1630: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
1640: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
1650: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
1660: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
1670: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
1680: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
1690: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
16a0: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
16b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
16d0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
16e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
16f0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 73  override int Res
1700: 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  et(SQLiteStateme
1710: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
1720: 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d  .      int n;...
1730: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1740: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
1750: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1760: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
1770: 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  et_interop(stmt.
1780: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
1790: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
17a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
17b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
17c0: 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  et(stmt._sqlite_
17d0: 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  stmt);..#endif..
17e0: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68  ..      // If th
17f0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64  e schema changed
1800: 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65  , try and re-pre
1810: 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69  pare it..      i
1820: 66 20 28 6e 20 3d 3d 20 31 37 29 20 2f 2f 20 53  f (n == 17) // S
1830: 51 4c 49 54 45 5f 53 43 48 45 4d 41 0d 0a 20 20  QLITE_SCHEMA..  
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
1850: 2f 20 52 65 63 72 65 61 74 65 20 61 20 64 75 6d  / Recreate a dum
1860: 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  my statement..  
1870: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
1880: 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67  ;..        using
1890: 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e   (SQLiteStatemen
18a0: 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28  t tmp = Prepare(
18b0: 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53  null, stmt._sqlS
18c0: 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20  tatement, null, 
18d0: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
18e0: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
18f0: 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 6f 75  eout * 1000), ou
1900: 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20  t str))..       
1910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
1920: 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78   Finalize the ex
1930: 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  isting statement
1940: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
1950: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69  ._sqlite_stmt.Di
1960: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
1970: 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20      // Reassign 
1980: 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20  a new statement 
1990: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
19a0: 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ld statement and
19b0: 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f   clear the tempo
19c0: 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20  rary one..      
19d0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
19e0: 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c  _stmt = tmp._sql
19f0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
1a00: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
1a10: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  _stmt = null;...
1a20: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65  .          // Re
1a30: 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73  apply parameters
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
1a50: 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28  .BindParameters(
1a60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
1a70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31         return -1
1a80: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
1a90: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
1aa0: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
1ab0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
1ac0: 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20 35 29   == 6 || n == 5)
1ad0: 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   // SQLITE_LOCKE
1ae0: 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59  D || SQLITE_BUSY
1af0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1b00: 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20   n;....      if 
1b10: 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  (n > 0)..       
1b20: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1b30: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
1b40: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
1b50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
1b60: 6e 20 30 3b 20 2f 2f 20 57 65 20 72 65 73 65 74  n 0; // We reset
1b70: 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63   OK, no schema c
1b80: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d  hanges..    }...
1b90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1ba0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 53 51  erride string SQ
1bb0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 0d  LiteLastError().
1bc0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
1bd0: 74 75 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e  turn SQLiteBase.
1be0: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
1bf0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
1c00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1c10: 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74 61  erride SQLiteSta
1c20: 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53  tement Prepare(S
1c30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
1c40: 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53  cnn, string strS
1c50: 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d  ql, SQLiteStatem
1c60: 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69  ent previous, ui
1c70: 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75  nt timeoutMS, ou
1c80: 74 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61  t string strRema
1c90: 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  in)..    {..    
1ca0: 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20    IntPtr stmt = 
1cb0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
1cc0: 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
1cd0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
1ce0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
1cf0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ;..      int n =
1d00: 20 31 37 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20   17;..      int 
1d10: 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20  retries = 0;..  
1d20: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
1d30: 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a  oUTF8(strSql);..
1d40: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
1d50: 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  edefs = null;.. 
1d60: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
1d70: 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b  ment cmd = null;
1d80: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
1d90: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
1da0: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
1db0: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
1dc0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
1dd0: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
1de0: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
1df0: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
1e00: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
1e10: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
1e20: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
1e30: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
1e40: 74 28 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d  t();..      try.
1e50: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1e60: 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31    while ((n == 1
1e70: 37 20 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e  7 || n == 6 || n
1e80: 20 3d 3d 20 35 29 20 26 26 20 72 65 74 72 69 65   == 5) && retrie
1e90: 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20  s < 3)..        
1ea0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
1eb0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1ec0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
1ed0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1ee0: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
1ef0: 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  op(_sql, psql, b
1f00: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
1f10: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20   stmt, out ptr, 
1f20: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  out len);..#else
1f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
1f40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1f50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
1f60: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
1f70: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
1f80: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29  t stmt, out ptr)
1f90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  ;..          len
1fa0: 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a   = -1;..#endif..
1fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1fc0: 6e 20 3d 3d 20 31 37 29 0d 0a 20 20 20 20 20 20  n == 17)..      
1fd0: 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b        retries++;
1fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
1ff0: 20 69 66 20 28 6e 20 3d 3d 20 31 29 0d 0a 20 20   if (n == 1)..  
2000: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2010: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
2020: 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65  g.Compare(SQLite
2030: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65  LastError(), "ne
2040: 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79  ar \"TYPES\": sy
2050: 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72  ntax error", Str
2060: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2070: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
2080: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
2090: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20a0: 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73       int pos = s
20b0: 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b  trSql.IndexOf(';
20c0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
20d0: 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31     if (pos == -1
20e0: 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c  ) pos = strSql.L
20f0: 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20  ength - 1;....  
2100: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2110: 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75  defs = strSql.Su
2120: 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b  bstring(0, pos +
2130: 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
2140: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
2150: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f  Sql.Substring(po
2160: 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  s + 1);....     
2170: 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61           strRema
2180: 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20  in = "";....    
2190: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
21a0: 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  (cmd == null && 
21b0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20  strSql.Length > 
21c0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
21d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21e0: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
21f0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
2200: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
2210: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
2220: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
2230: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
2240: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
2250: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2270: 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  cmd != null)..  
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
2290: 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64  d.SetTypes(typed
22a0: 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  efs);....       
22b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
22c0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
22d0: 7d 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  }..#if !PLATFORM
22e0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
22f0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  K..            e
2300: 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e  lse if (_buildin
2310: 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65  gSchema == false
2320: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
2330: 72 65 28 53 51 4c 69 74 65 4c 61 73 74 45 72 72  re(SQLiteLastErr
2340: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
2350: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
2360: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
2370: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
2380: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
2390: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
23a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23b0: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
23c0: 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  = "";..         
23d0: 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63       _buildingSc
23e0: 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20  hema = true;..  
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2420: 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45    ISQLiteSchemaE
2430: 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20  xtensions ext = 
2440: 28 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64  ((IServiceProvid
2450: 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79  er)SQLiteFactory
2460: 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65  .Instance).GetSe
2470: 72 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51  rvice(typeof(ISQ
2480: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
2490: 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74  ions)) as ISQLit
24a0: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
24b0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  s;....          
24c0: 20 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d        if (ext !=
24d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24e0: 20 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75            ext.Bu
24f0: 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e  ildTempSchema(cn
2500: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
2510: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
2520: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
2530: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
2540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2560: 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70        cmd = Prep
2570: 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c  are(cnn, strSql,
2580: 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f   previous, timeo
2590: 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d  utMS, out strRem
25a0: 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ain);..         
25b0: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
25c0: 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20  = strRemain;..  
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25f0: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
2620: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
2630: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2640: 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69           _buildi
2650: 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65  ngSchema = false
2660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2680: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
2690: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26a0: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
26b0: 36 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20  6 || n == 5) // 
26c0: 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20  Locked -- delay 
26d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62  a small amount b
26e0: 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a  efore retrying..
26f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2700: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
2710: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
2720: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
2730: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
2740: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
2750: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
2770: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
2780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2790: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
27a0: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
27b0: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
27c0: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
27d0: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
27e0: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
27f0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
2800: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
2810: 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20   > timeoutMS).. 
2820: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2830: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2840: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2850: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
2860: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
2870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2880: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
28b0: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
28c0: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
28d0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
28e0: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
28f0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
2900: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
2910: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
2920: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
2930: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2940: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2950: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e  .        if (n >
2960: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
2970: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
2980: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2990: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
29a0: 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38  strRemain = UTF8
29b0: 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65  ToString(ptr, le
29c0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  n);....        i
29d0: 66 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74  f (stmt != IntPt
29e0: 72 2e 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e 65  r.Zero) cmd = ne
29f0: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
2a00: 74 28 74 68 69 73 2c 20 73 74 6d 74 2c 20 73 74  t(this, stmt, st
2a10: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
2a20: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
2a30: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
2a40: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
2a50: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
2a60: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
2a70: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2a80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a90: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
2aa0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2ab0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2ac0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
2ad0: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(SQLite
2ae0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2af0: 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c  int index, doubl
2b00: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
2b10: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
2b20: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2b30: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
2b40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2b50: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
2b60: 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c  double(stmt._sql
2b70: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
2b80: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
2b90: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
2ba0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2bb0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
2bc0: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
2bd0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
2be0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
2bf0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
2c00: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
2c10: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
2c20: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
2c30: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
2c40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2c50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2c60: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28  void Bind_Int32(
2c70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2c80: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
2c90: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
2ca0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
2cb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
2cc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
2cd0: 6e 64 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  nd_int(stmt._sql
2ce0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
2cf0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
2d00: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
2d10: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2d20: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
2d30: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
2d40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2d50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
2d60: 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69   Bind_Int64(SQLi
2d70: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2d80: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e  , int index, lon
2d90: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
2da0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
2db0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2dc0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
2dd0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2de0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
2df0: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
2e00: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
2e10: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
2e20: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
2e30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2e40: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
2e50: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
2e60: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
2e70: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
2e80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2e90: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
2ea0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
2eb0: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
2ec0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
2ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2ee0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2ef0: 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c  id Bind_Text(SQL
2f00: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2f10: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74  t, int index, st
2f20: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
2f30: 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d   {..      byte[]
2f40: 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
2f50: 65 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  e);..      int n
2f60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2f70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
2f80: 69 6e 64 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  ind_text(stmt._s
2f90: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
2fa0: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
2fb0: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
2fc0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
2fd0: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
2fe0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
2ff0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
3000: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
3010: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3020: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
3030: 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
3040: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
3050: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
3060: 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  me dt)..    {.. 
3070: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
3080: 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 20 20 20  ToUTF8(dt);..   
3090: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
30a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
30b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
30c0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
30d0: 6d 74 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  mt, index, b, b.
30e0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
30f0: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
3100: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
3110: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
3120: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
3130: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
3140: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3150: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
3160: 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c  id Bind_Blob(SQL
3170: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
3180: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  t, int index, by
3190: 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a  te[] blobData)..
31a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
31b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
31c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
31d0: 5f 62 69 6e 64 5f 62 6c 6f 62 28 73 74 6d 74 2e  _bind_blob(stmt.
31e0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
31f0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
3200: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
3210: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
3220: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
3230: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3240: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
3250: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
3260: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3270: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3280: 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c  e void Bind_Null
3290: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
32a0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
32b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
32c0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
32d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32e0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 74  te3_bind_null(st
32f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
3300: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
3310: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
3320: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3330: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
3340: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3350: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3360: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
3370: 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28  Bind_ParamCount(
3380: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3390: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
33a0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
33b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
33c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
33d0: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73 74 6d 74  meter_count(stmt
33e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
33f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3400: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3410: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
3420: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
3430: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
3440: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
3450: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
3460: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
3470: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
3480: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
3490: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
34a0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
34b0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69  parameter_name_i
34c0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
34d0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
34e0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
34f0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
3500: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
3510: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
3520: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
3530: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
3540: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
3550: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
3560: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
3570: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3580: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
3590: 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53  ind_ParamIndex(S
35a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
35b0: 74 6d 74 2c 20 73 74 72 69 6e 67 20 70 61 72 61  tmt, string para
35c0: 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  mName)..    {.. 
35d0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
35e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
3600: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 73 74 6d  ameter_index(stm
3610: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
3620: 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65  ToUTF8(paramName
3630: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
3640: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3650: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f  ide int ColumnCo
3660: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
3670: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
3680: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
3690: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
36a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
36b0: 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71  n_count(stmt._sq
36c0: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20  lite_stmt);..   
36d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
36e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
36f0: 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51  ng ColumnName(SQ
3700: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3710: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
3720: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
3730: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
3740: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
3750: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
3760: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
3770: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3780: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69  e3_column_name_i
3790: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
37a0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
37b0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
37c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
37d0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
37e0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
37f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3800: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
3810: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3820: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
3830: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
3840: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3850: 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
3860: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53  ColumnAffinity(S
3870: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3880: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
3890: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
38a0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
38b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
38c0: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d  _column_type(stm
38d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
38e0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
38f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3900: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
3910: 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65  olumnType(SQLite
3920: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3930: 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54  int index, out T
3940: 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66  ypeAffinity nAff
3950: 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20  inity)..    {.. 
3960: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23       int len;..#
3970: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
3980: 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
3990: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
39a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
39b0: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
39c0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
39d0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
39e0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23  ex, out len);..#
39f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20  else..      len 
3a00: 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74  = -1;..      Int
3a10: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
3a20: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
3a40: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
3a50: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
3a60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41  #endif..      nA
3a70: 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e  ffinity = Column
3a80: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
3a90: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3aa0: 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e  if (p != IntPtr.
3ab0: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46  Zero) return UTF
3ac0: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
3ad0: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a  );..      else..
3ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3af0: 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73   string[] ar = s
3b00: 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69  tmt.TypeDefiniti
3b10: 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ons;..        if
3b20: 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (ar != null).. 
3b30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b40: 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20      if (index < 
3b50: 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b  ar.Length && ar[
3b60: 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d  index] != null).
3b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3b80: 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a  urn ar[index];..
3b90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3ba0: 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
3bb0: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
3bc0: 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66     //switch (nAf
3bd0: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20  finity)..       
3be0: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f   //{..        //
3bf0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
3c00: 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
3c10: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
3c20: 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20   "BIGINT";..    
3c30: 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70      //  case Typ
3c40: 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
3c50: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
3c60: 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22   return "DOUBLE"
3c70: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
3c80: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
3c90: 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
3ca0: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c  //    return "BL
3cb0: 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  OB";..        //
3cc0: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
3cd0: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
3ce0: 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20   "TEXT";..      
3cf0: 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a    //}..      }..
3d00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3d10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
3d20: 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53  nt ColumnIndex(S
3d30: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3d40: 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  tmt, string colu
3d50: 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  mnName)..    {..
3d60: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f        int x = Co
3d70: 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b  lumnCount(stmt);
3d80: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69  ....      for (i
3d90: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b  nt n = 0; n < x;
3da0: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   n++)..      {..
3db0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
3dc0: 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d  ng.Compare(colum
3dd0: 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d  nName, ColumnNam
3de0: 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69  e(stmt, n), Stri
3df0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
3e00: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
3e10: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
3e20: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
3e30: 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
3e40: 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n -1;..    }....
3e50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3e60: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
3e70: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
3e80: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3e90: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3ea0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
3eb0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3ec0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
3ed0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3ee0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
3ef0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3f00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
3f10: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
3f20: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3f30: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
3f40: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
3f50: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
3f60: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
3f70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3f80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
3f90: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
3fa0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3fb0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
3fc0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
3fd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3fe0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
3ff0: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
4000: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
4010: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
4020: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
4030: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4040: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
4050: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4060: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4070: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4080: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
4090: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
40a0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
40b0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
40c0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
40d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
40e0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
40f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4100: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
4110: 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
4120: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
4130: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
4140: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
4150: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4160: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
4170: 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74  nTableName(SQLit
4180: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
4190: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
41a0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
41b0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
41c0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
41d0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
41e0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
41f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4200: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
4210: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
4220: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4230: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
4240: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4250: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4260: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4270: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4280: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
4290: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
42a0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
42b0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
42c0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
42d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
42e0: 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
42f0: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
4300: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
4310: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
4320: 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  t string dataTyp
4330: 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  e, out string co
4340: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f  llateSequence, o
4350: 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ut bool notNull,
4360: 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72   out bool primar
4370: 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61  yKey, out bool a
4380: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20  utoIncrement).. 
4390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
43a0: 74 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d  tr dataTypePtr;.
43b0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
43c0: 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20  llSeqPtr;..     
43d0: 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a   int nnotNull;..
43e0: 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61        int nprima
43f0: 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e  ryKey;..      in
4400: 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20  t nautoInc;..   
4410: 20 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20     int n;..     
4420: 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20   int dtLen;..   
4430: 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d     int csLen;...
4440: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4450: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
4460: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4470: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
4480: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
4490: 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
44a0: 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
44b0: 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
44c0: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
44d0: 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74  , out dataTypePt
44e0: 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74  r, out collSeqPt
44f0: 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, out nnotNull,
4500: 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   out nprimaryKey
4510: 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20  , out nautoInc, 
4520: 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63  out dtLen, out c
4530: 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
4540: 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
4550: 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
4560: 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
4570: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4580: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
4590: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
45a0: 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
45b0: 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
45c0: 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
45d0: 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61  (column), out da
45e0: 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63  taTypePtr, out c
45f0: 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e  ollSeqPtr, out n
4600: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72  notNull, out npr
4610: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61  imaryKey, out na
4620: 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
4630: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
4640: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
4650: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
4660: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
4670: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74  ));....      dat
4680: 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74  aType = UTF8ToSt
4690: 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72  ring(dataTypePtr
46a0: 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20  , dtLen);..     
46b0: 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
46c0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
46d0: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65  collSeqPtr, csLe
46e0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74  n);....      not
46f0: 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c  Null = (nnotNull
4700: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70   == 1);..      p
4710: 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72  rimaryKey = (npr
4720: 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d  imaryKey == 1);.
4730: 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65  .      autoIncre
4740: 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63  ment = (nautoInc
4750: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a   == 1);..    }..
4760: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4770: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
4780: 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  etDouble(SQLiteS
4790: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
47a0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
47b0: 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
47c0: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
47d0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
47e0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
47f0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
4800: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4810: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73  _column_double(s
4820: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
4830: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65  , index);..#else
4840: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
4850: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4860: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
4870: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
4880: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4890: 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  ex, out value);.
48a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
48b0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
48c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
48d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
48e0: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
48f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
4900: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
4910: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
4920: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4930: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4940: 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  mn_int(stmt._sql
4950: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
4960: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4970: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4980: 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28  e long GetInt64(
4990: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
49a0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
49b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c  ..    {..      l
49c0: 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ong value;..#if 
49d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
49e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
49f0: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
4a00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4a10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
4a20: 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  64(stmt._sqlite_
4a30: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
4a40: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
4a50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4a60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
4a70: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
4a80: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
4a90: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
4aa0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4ab0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
4ac0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4ad0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4ae0: 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
4af0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
4b00: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
4b10: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
4b20: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4b30: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
4b40: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
4b50: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
4b60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4b70: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
4b80: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
4b90: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
4ba0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
4bb0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4bc0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
4bd0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
4be0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4bf0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
4c00: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
4c10: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
4c20: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
4c30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4c40: 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74  ide DateTime Get
4c50: 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
4c60: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4c70: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4c80: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4c90: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
4ca0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
4cb0: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
4cc0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4cd0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4ce0: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
4cf0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
4d00: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
4d10: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
4d20: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
4d30: 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
4d40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4d50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4d60: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
4d70: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
4d80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
4d90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4da0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
4db0: 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53 74  etBytes(SQLiteSt
4dc0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
4dd0: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
4de0: 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
4df0: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
4e00: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
4e10: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
4e20: 6e 74 50 74 72 20 70 74 72 3b 0d 0a 20 20 20 20  ntPtr ptr;..    
4e30: 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
4e40: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
4e50: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
4e60: 20 20 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65     nlen = Unsafe
4e70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4e80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
4e90: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
4ea0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
4eb0: 20 20 20 20 20 70 74 72 20 3d 20 55 6e 73 61 66       ptr = Unsaf
4ec0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4ed0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
4ee0: 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  ob(stmt._sqlite_
4ef0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
4f00: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
4f10: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
4f20: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
4f30: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
4f40: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
4f50: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
4f60: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
4f70: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
4f80: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
4f90: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
4fa0: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
4fb0: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
4fc0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
4fd0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  d > 0)..        
4fe0: 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
4ff0: 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
5000: 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
5010: 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
5020: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
5030: 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64      else nCopied
5040: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72   = 0;....      r
5050: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
5060: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5070: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
5080: 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
5090: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
50a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
50b0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
50c0: 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
50d0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
50e0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
50f0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
5100: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
5110: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
5120: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
5130: 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
5140: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
5150: 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
5160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
5170: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
5180: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
5190: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
51a0: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
51b0: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
51c0: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
51d0: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
51e0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
51f0: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
5200: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
5210: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
5220: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
5230: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
5240: 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
5250: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
5260: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
5270: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
5280: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
5290: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
52a0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
52b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
52c0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
52d0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
52e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
52f0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
5300: 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
5310: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
5320: 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
5330: 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
5340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5350: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
5360: 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
5370: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
5380: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
5390: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
53a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
53b0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
53c0: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
53d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
53e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
53f0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
5400: 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
5410: 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
5420: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
5430: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
5440: 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
5450: 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
5460: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
5470: 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20  k funcfinal)..  
5480: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
5490: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
54a0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
54b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
54c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
54d0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
54e0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
54f0: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
5500: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
5510: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
5520: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
5530: 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
5540: 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
5550: 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  : 0);..      if 
5560: 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73  (n == 0) n = Uns
5570: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5580: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
5590: 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
55a0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
55b0: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
55c0: 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 1, IntPtr.Zer
55d0: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
55e0: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
55f0: 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
5600: 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23  ue) ? 1 : 0);..#
5610: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20  else..      n = 
5620: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5630: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
5640: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
5650: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
5660: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
5670: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
5680: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
5690: 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20  ncfinal);..     
56a0: 20 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d   if (n == 0) n =
56b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
56c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
56d0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
56e0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
56f0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
5700: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
5710: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
5720: 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64  uncfinal);..#end
5730: 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
5740: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
5750: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
5760: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
5770: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
5780: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5790: 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74  rride void Creat
57a0: 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e  eCollation(strin
57b0: 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20  g strCollation, 
57c0: 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20  SQLiteCollation 
57d0: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  func, SQLiteColl
57e0: 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20  ation func16).. 
57f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
5800: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5810: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5820: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
5830: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
5840: 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20  rCollation), 2, 
5850: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
5860: 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  c16);..      if 
5870: 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73  (n == 0) n = Uns
5880: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5890: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
58a0: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
58b0: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
58c0: 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e  ion), 1, IntPtr.
58d0: 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20  Zero, func);..  
58e0: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
58f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5900: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
5910: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
5920: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5930: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5940: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
5950: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
5960: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
5970: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
5980: 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
5990: 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
59a0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
59b0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
59c0: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
59d0: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
59e0: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
59f0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
5a00: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
5a10: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
5a20: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
5a30: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
5a40: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
5a50: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
5a60: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
5a70: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
5a80: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
5a90: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
5aa0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
5ab0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
5ac0: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
5ad0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
5ae0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
5af0: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
5b00: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
5b10: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
5b20: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
5b30: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
5b40: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
5b50: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
5b60: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
5b70: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
5b80: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
5b90: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
5ba0: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
5bb0: 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
5bc0: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
5bd0: 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
5be0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
5bf0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5c00: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
5c10: 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65  ollcompare(conte
5c20: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
5c30: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
5c40: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
5c50: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
5c60: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
5c70: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
5c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5c90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
5ca0: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
5cb0: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
5cc0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
5cd0: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
5ce0: 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68  t, char[] c1, ch
5cf0: 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d  ar[] c2)..    {.
5d00: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
5d10: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
5d20: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
5d30: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
5d40: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
5d50: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
5d60: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
5d70: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
5d80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5d90: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
5da0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
5db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
5dc0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
5dd0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
5de0: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
5df0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
5e00: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
5e10: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
5e20: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
5e30: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
5e40: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
5e50: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
5e60: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
5e70: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
5e80: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
5e90: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
5ea0: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
5eb0: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
5ec0: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
5ed0: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
5ee0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
5ef0: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
5f00: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
5f10: 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  c1);..      b2 =
5f20: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
5f30: 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(c2);....    
5f40: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
5f50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5f60: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
5f70: 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74  lcompare(context
5f80: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
5f90: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
5fa0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
5fb0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
5fc0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
5fd0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
5fe0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5ff0: 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
6000: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
6010: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
6020: 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
6030: 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
6040: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
6050: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
6060: 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
6070: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
6080: 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
6090: 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
60a0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
60b0: 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20      int type;.. 
60c0: 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20       int enc;.. 
60d0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
60e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
60f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
6100: 65 78 74 5f 63 6f 6c 6c 73 65 71 28 63 6f 6e 74  ext_collseq(cont
6110: 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f  ext, out type, o
6120: 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29  ut enc, out len)
6130: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
6140: 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61   != null) seq.Na
6150: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
6160: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
6170: 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f    seq.Type = (Co
6180: 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29  llationTypeEnum)
6190: 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71  type;..      seq
61a0: 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a  ._func = func;..
61b0: 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69        seq.Encodi
61c0: 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45  ng = (CollationE
61d0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b  ncodingEnum)enc;
61e0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
61f0: 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   seq;..#else..  
6200: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
6210: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
6220: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
6230: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6240: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6250: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
6260: 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20  lueBytes(IntPtr 
6270: 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  p, int nDataOffs
6280: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
6290: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
62a0: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
62b0: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
62c0: 70 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ptr;..      int 
62d0: 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
62e0: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
62f0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6c 65  th;....      nle
6300: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6310: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6320: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d  value_bytes(p);.
6330: 0a 20 20 20 20 20 20 70 74 72 20 3d 20 55 6e 73  .      ptr = Uns
6340: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6350: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
6360: 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
6370: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
6380: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
6390: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
63a0: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
63b0: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
63c0: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
63d0: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
63e0: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
63f0: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
6400: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
6410: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
6420: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
6430: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
6440: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
6450: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
6460: 70 74 72 2e 54 6f 49 6e 74 33 32 28 29 20 2b 20  ptr.ToInt32() + 
6470: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
6480: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
6490: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
64a0: 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
64b0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
64c0: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
64d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
64e0: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
64f0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75  GetParamValueDou
6500: 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ble(IntPtr ptr).
6510: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
6520: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
6530: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6540: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6550: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
6560: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6570: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
6580: 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  ble(ptr);..#else
6590: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
65a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
65b0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
65c0: 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75  _interop(ptr, ou
65d0: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
65e0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
65f0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
6600: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6610: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61  erride int GetPa
6620: 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e  ramValueInt32(In
6630: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
6640: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
6650: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6660: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
6670: 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20  _int(ptr);..    
6680: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6690: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
66a0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
66b0: 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  64(IntPtr ptr)..
66c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
66d0: 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  64 value;..#if !
66e0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
66f0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6700: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
6710: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6720: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
6730: 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  (ptr);..#else.. 
6740: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
6750: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6760: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
6770: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
6780: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
6790: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
67a0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
67b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
67c0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61 72  de string GetPar
67d0: 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50  amValueText(IntP
67e0: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
67f0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
6800: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
6810: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
6820: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
6830: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6840: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
6850: 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70  e_text_interop(p
6860: 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  tr, out len), le
6870: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
6880: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
6890: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
68a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
68b0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72  3_value_text(ptr
68c0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
68d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
68e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
68f0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
6900: 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49  ParamValueType(I
6910: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
6920: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
6930: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6940: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
6950: 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20  e_type(ptr);..  
6960: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6970: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
6980: 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74  d ReturnBlob(Int
6990: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74  Ptr context, byt
69a0: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
69b0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      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 72 65 73 75 6c 74 5f 62 6c 6f 62  ite3_result_blob
69e0: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c  (context, value,
69f0: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28   value.Length, (
6a00: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
6a10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6a20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
6a30: 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28  id ReturnDouble(
6a40: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
6a50: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
6a60: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
6a70: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
6a80: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
6a90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6aa0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
6ab0: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76  ouble(context, v
6ac0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
6ad0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
6ae0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6af0: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
6b00: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
6b10: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
6b20: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
6b30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6b40: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45  ide void ReturnE
6b50: 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
6b60: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
6b70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6b80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6b90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
6ba0: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
6bb0: 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
6bc0: 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b  , value.Length);
6bd0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6be0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6bf0: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
6c00: 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
6c10: 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
6c20: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
6c30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6c40: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
6c50: 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  t(context, value
6c60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6c70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6c80: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
6c90: 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
6ca0: 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  xt, long value).
6cb0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
6cc0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6cd0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
6ce0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6cf0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
6d00: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
6d10: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
6d20: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
6d30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6d40: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
6d50: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
6d60: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
6d70: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
6d80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6d90: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
6da0: 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
6db0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
6dc0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
6dd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
6de0: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
6df0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
6e00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6e10: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
6e20: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
6e30: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
6e40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6e50: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
6e60: 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
6e70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6e80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
6e90: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
6ea0: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
6eb0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
6ec0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
6ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6ee0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e  rnal override In
6ef0: 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f  tPtr AggregateCo
6f00: 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  ntext(IntPtr con
6f10: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
6f20: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
6f30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6f40: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
6f50: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
6f60: 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , 1);..    }....
6f70: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
6f80: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
6f90: 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65  nded result code
6fa0: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51  s returned by SQ
6fb0: 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  Lite..    intern
6fc0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
6fd0: 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75   SetExtendedResu
6fe0: 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e  ltCodes(bool bOn
6ff0: 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
7000: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
7010: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
7020: 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
7030: 6f 64 65 73 28 5f 73 71 6c 2c 20 28 62 4f 6e 4f  odes(_sql, (bOnO
7040: 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
7050: 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
7060: 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
7070: 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ite error code..
7080: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7090: 72 72 69 64 65 20 69 6e 74 20 52 65 73 75 6c 74  rride int Result
70a0: 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
70b0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
70c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
70d0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
70e0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  _sql);..    }.. 
70f0: 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
7100: 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65  last SQLite exte
7110: 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d  nded error code.
7120: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7130: 65 72 72 69 64 65 20 69 6e 74 20 45 78 74 65 6e  erride int Exten
7140: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  dedResultCode().
7150: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7160: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
7170: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7180: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
7190: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
71a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
71b0: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
71c0: 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
71d0: 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
71e0: 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
71f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
7200: 6f 67 4d 65 73 73 61 67 65 28 69 6e 74 20 69 45  ogMessage(int iE
7210: 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
7220: 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
7230: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7240: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7250: 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c  e3_log(iErrCode,
7260: 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65   ToUTF8(zMessage
7270: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7280: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7290: 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73  ide void SetPass
72a0: 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
72b0: 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
72c0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  {..      int n =
72d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
72e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79  hods.sqlite3_key
72f0: 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42  (_sql, passwordB
7300: 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79  ytes, passwordBy
7310: 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
7320: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
7330: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7340: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
7350: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
7360: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7370: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7380: 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
7390: 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
73a0: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
73b0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
73c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
73d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
73e0: 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61  ekey(_sql, newPa
73f0: 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65  sswordBytes, (ne
7400: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  wPasswordBytes =
7410: 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65  = null) ? 0 : ne
7420: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c  wPasswordBytes.L
7430: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
7440: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
7450: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7460: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
7470: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
7480: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7490: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
74a0: 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
74b0: 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
74c0: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
74d0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
74e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
74f0: 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
7500: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
7510: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
7520: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7530: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
7540: 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
7550: 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
7560: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
7570: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
7580: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7590: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
75a0: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
75b0: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
75c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
75d0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
75e0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
75f0: 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
7600: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
7610: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
7620: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7630: 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
7640: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
7650: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7660: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7670: 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
7680: 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
7690: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
76a0: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
76b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
76c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
76d0: 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
76e0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
76f0: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
7700: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7710: 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
7720: 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
7730: 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
7740: 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
7750: 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
7760: 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
7770: 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
7780: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
7790: 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
77a0: 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
77b0: 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
77c0: 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
77d0: 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
77e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
77f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7800: 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
7810: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
7820: 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
7830: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
7840: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
7850: 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
7860: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
7870: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 53  l override int S
7880: 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
7890: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
78a0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
78b0: 20 20 20 20 20 20 69 6e 74 20 72 63 20 3d 20 55        int rc = U
78c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
78d0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  ds.sqlite3_confi
78e0: 67 28 28 69 6e 74 29 53 51 4c 69 74 65 43 6f 6e  g((int)SQLiteCon
78f0: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
7900: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75  E_CONFIG_LOG, fu
7910: 6e 63 2c 20 28 49 6e 74 50 74 72 29 30 29 3b 0d  nc, (IntPtr)0);.
7920: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
7930: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
7940: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7950: 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20  .    /// Helper 
7960: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72  function to retr
7970: 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66  ieve a column of
7980: 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63   data from an ac
7990: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d  tive statement..
79a0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
79b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
79c0: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
79d0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  The statement be
79e0: 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72  ing step()'d thr
79f0: 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ough</param>..  
7a00: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7a10: 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
7a20: 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
7a30: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
7a40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7a50: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
7a60: 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
7a70: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
7a80: 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
7a90: 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
7aa0: 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
7ab0: 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
7ac0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
7ad0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7ae0: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
7af0: 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
7b00: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
7b10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7b20: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
7b30: 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
7b40: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
7b50: 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
7b60: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
7b70: 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c        if (IsNull
7b80: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72  (stmt, index)) r
7b90: 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
7ba0: 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41  ue;..      TypeA
7bb0: 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79  ffinity aff = ty
7bc0: 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  p.Affinity;..   
7bd0: 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
7be0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
7bf0: 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
7c00: 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
7c10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
7c20: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
7c30: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
7c40: 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
7c50: 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
7c60: 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
7c70: 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
7c80: 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (aff)..      {..
7c90: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
7ca0: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
7cc0: 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
7cd0: 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66  e.Guid && typ.Af
7ce0: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
7cf0: 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20  finity.Text)..  
7d00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7d10: 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78   new Guid(GetTex
7d20: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  t(stmt, index));
7d30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
7d40: 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79  t n = (int)GetBy
7d50: 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
7d60: 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b   0, null, 0, 0);
7d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65  ..          byte
7d80: 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b  [] b = new byte[
7d90: 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47  n];..          G
7da0: 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
7db0: 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29  dex, 0, b, 0, n)
7dc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
7dd0: 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44  f (typ.Type == D
7de0: 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20  bType.Guid && n 
7df0: 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20  == 16)..        
7e00: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
7e10: 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  uid(b);....     
7e20: 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a       return b;..
7e30: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
7e40: 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69  eAffinity.DateTi
7e50: 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  me:..          r
7e60: 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d  eturn GetDateTim
7e70: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
7e80: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
7e90: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
7ea0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  e:..          if
7eb0: 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
7ec0: 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74  urn GetDouble(st
7ed0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
7ee0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
7ef0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7f00: 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
7f10: 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  pe(GetDouble(stm
7f20: 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
7f30: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ll);..        ca
7f40: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
7f50: 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
7f60: 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29    if (t == null)
7f70: 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34   return GetInt64
7f80: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
7f90: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7fb0: 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
7fc0: 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73  eType(GetInt64(s
7fd0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
7fe0: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
7ff0: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
8000: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
8010: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
8020: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8030: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8040: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
8050: 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28  tCursorForTable(
8060: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8070: 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e  stmt, int db, in
8080: 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20  t rootPage)..   
8090: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
80a0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
80b0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
80c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
80d0: 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 28  e3_table_cursor(
80e0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
80f0: 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29  t, db, rootPage)
8100: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8110: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64  return -1;..#end
8120: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
8130: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8140: 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64  de long GetRowId
8150: 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65  ForCursor(SQLite
8160: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8170: 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20  int cursor)..   
8180: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
8190: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
81a0: 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20  long rowid;..   
81b0: 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61     int rc = Unsa
81c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
81d0: 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72  sqlite3_cursor_r
81e0: 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74  owid(stmt._sqlit
81f0: 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20  e_stmt, cursor, 
8200: 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20  out rowid);..   
8210: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 30 29 20     if (rc == 0) 
8220: 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d  return rowid;...
8230: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
8240: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8250: 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
8260: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8270: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8280: 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f   void GetIndexCo
8290: 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f  lumnExtendedInfo
82a0: 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65  (string database
82b0: 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20  , string index, 
82c0: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f  string column, o
82d0: 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c  ut int sortMode,
82e0: 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72   out int onError
82f0: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
8300: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d  lationSequence).
8310: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
8320: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
8330: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b      IntPtr coll;
8340: 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c  ..      int coll
8350: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
8360: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20  rc;....      rc 
8370: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8380: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
8390: 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f  dex_column_info_
83a0: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
83b0: 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20  UTF8(database), 
83c0: 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54  ToUTF8(index), T
83d0: 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f  oUTF8(column), o
83e0: 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  ut sortMode, out
83f0: 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f   onError, out co
8400: 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29  ll, out colllen)
8410: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
8420: 21 3d 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20  != 0) throw new 
8430: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8440: 72 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20 20  rc, "");....    
8450: 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
8460: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
8470: 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e  ng(coll, colllen
8480: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8490: 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a   sortMode = 0;..
84a0: 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20        onError = 
84b0: 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  2;..      collat
84c0: 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42  ionSequence = "B
84d0: 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d  INARY";..#endif.
84e0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..