System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4b884115cb4e9d71b04caa2e6e8d9bc8a6c523c7:


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 69 6e 74 65 72    }....    inter
0a50: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
0a60: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
0a70: 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74  rFilename, SQLit
0a80: 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 66  eOpenFlagsEnum f
0a90: 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f  lags, int maxPoo
0aa0: 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50  lSize, bool useP
0ab0: 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ool)..    {..   
0ac0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
0ad0: 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a  ull) return;....
0ae0: 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
0af0: 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20   usePool;..     
0b00: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
0b10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0b20: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46  _fileName = strF
0b30: 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ilename;..      
0b40: 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43    _sql = SQLiteC
0b50: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65  onnectionPool.Re
0b60: 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65  move(strFilename
0b70: 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f  , maxPoolSize, o
0b80: 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  ut _poolVersion)
0b90: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
0ba0: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
0bb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
0bc0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64          IntPtr d
0bd0: 62 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  b;....#if !SQLIT
0be0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
0bf0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
0c00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0c10: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
0c20: 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46  erop(ToUTF8(strF
0c30: 69 6c 65 6e 61 6d 65 29 2c 20 28 69 6e 74 29 66  ilename), (int)f
0c40: 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a  lags, out db);..
0c50: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69  #else..        i
0c60: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
0c70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
0c80: 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46  e3_open_v2(ToUTF
0c90: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
0ca0: 6f 75 74 20 64 62 2c 20 28 69 6e 74 29 66 6c 61  out db, (int)fla
0cb0: 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  gs, IntPtr.Zero)
0cc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
0cd0: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
0ce0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
0cf0: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
0d00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71  ;....        _sq
0d10: 6c 20 3d 20 64 62 3b 0d 0a 20 20 20 20 20 20 7d  l = db;..      }
0d20: 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20  ..      // Bind 
0d30: 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69  functions to thi
0d40: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49  s connection.  I
0d50: 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66  f any previous f
0d60: 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  unctions of the 
0d70: 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20  same name..     
0d80: 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79   // were already
0d90: 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65   bound, then the
0da0: 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65   new bindings re
0db0: 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a  place the old...
0dc0: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
0dd0: 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65 46 75  Array = SQLiteFu
0de0: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
0df0: 69 6f 6e 73 28 74 68 69 73 29 3b 0d 0a 20 20 20  ions(this);..   
0e00: 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29     SetTimeout(0)
0e10: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
0e20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
0e30: 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c  e void ClearPool
0e40: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
0e50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
0e60: 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28  nPool.ClearPool(
0e70: 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  _fileName);..   
0e80: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
0e90: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
0ea0: 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20   SetTimeout(int 
0eb0: 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20  nTimeoutMS)..   
0ec0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
0ed0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
0ee0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75  thods.sqlite3_bu
0ef0: 73 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c  sy_timeout(_sql,
0f00: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
0f10: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
0f20: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
0f30: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
0f40: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
0f50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
0f60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
0f70: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
0f80: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
0f90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
0fa0: 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  nt n;..      Ran
0fb0: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
0fc0: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
0fd0: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
0fe0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
0ff0: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
1000: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
1010: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
1020: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
1030: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
1040: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
1050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1060: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
1070: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1080: 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69  _step(stmt._sqli
1090: 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  te_stmt);....   
10a0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 30       if (n == 10
10b0: 30 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  0) return true;.
10c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
10d0: 3d 20 31 30 31 29 20 72 65 74 75 72 6e 20 66 61  = 101) return fa
10e0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
10f0: 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20  if (n > 0)..    
1100: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1110: 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20   int r;....     
1120: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
1130: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
1140: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
1150: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
1160: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
1170: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
1180: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
1190: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
11a0: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
11b0: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
11c0: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
11d0: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
11e0: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
11f0: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
1200: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
1210: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
1220: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
1230: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
1240: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
1250: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 30 29 0d      if (r == 0).
1260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1270: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1280: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
1290: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
12a0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
12b0: 69 66 20 28 28 72 20 3d 3d 20 36 20 7c 7c 20 72  if ((r == 6 || r
12c0: 20 3d 3d 20 35 29 20 26 26 20 73 74 6d 74 2e 5f   == 5) && stmt._
12d0: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
12e0: 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   // SQLITE_LOCKE
12f0: 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59  D || SQLITE_BUSY
1300: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
1310: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
1320: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
1330: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
1340: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
1350: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
1360: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
1370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1380: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
1390: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
13a0: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
13b0: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
13c0: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
13d0: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
13e0: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
13f0: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
1400: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
1410: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
1420: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20  ck > timeout).. 
1430: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1440: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1450: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1460: 70 74 69 6f 6e 28 72 2c 20 53 51 4c 69 74 65 4c  ption(r, SQLiteL
1470: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
1480: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1490: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
14c0: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
14d0: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
14e0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
14f0: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
1500: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
1510: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
1520: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
1530: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
1540: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1550: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
1560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1570: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1580: 65 72 72 69 64 65 20 69 6e 74 20 52 65 73 65 74  erride int Reset
1590: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
15a0: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
15b0: 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23       int n;....#
15c0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
15d0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
15e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
15f0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
1600: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
1610: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
1620: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
1630: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1640: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
1650: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
1660: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  mt);..#endif....
1670: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
1680: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20  schema changed, 
1690: 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61  try and re-prepa
16a0: 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20  re it..      if 
16b0: 28 6e 20 3d 3d 20 31 37 29 20 2f 2f 20 53 51 4c  (n == 17) // SQL
16c0: 49 54 45 5f 53 43 48 45 4d 41 0d 0a 20 20 20 20  ITE_SCHEMA..    
16d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
16e0: 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79  Recreate a dummy
16f0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
1700: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d      string str;.
1710: 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28  .        using (
1720: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1730: 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75  tmp = Prepare(nu
1740: 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61  ll, stmt._sqlSta
1750: 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75  tement, null, (u
1760: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
1770: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
1780: 75 74 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20  ut * 1000), out 
1790: 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  str))..        {
17a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46  ..          // F
17b0: 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73  inalize the exis
17c0: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ting statement..
17d0: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
17e0: 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70  sqlite_stmt.Disp
17f0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
1800: 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20    // Reassign a 
1810: 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f  new statement po
1820: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64  inter to the old
1830: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63   statement and c
1840: 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61  lear the tempora
1850: 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20  ry one..        
1860: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
1870: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
1880: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
1890: 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73     tmp._sqlite_s
18a0: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  tmt = null;.... 
18b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70           // Reap
18c0: 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a  ply parameters..
18d0: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42            stmt.B
18e0: 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b  indParameters();
18f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1900: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 20       return -1; 
1910: 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c  // Reset was OK,
1920: 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61   with schema cha
1930: 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  nge..      }..  
1940: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
1950: 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f  = 6 || n == 5) /
1960: 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  / SQLITE_LOCKED 
1970: 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a  || SQLITE_BUSY..
1980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1990: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
19a0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 74   > 0)..        t
19b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
19d0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
19e0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
19f0: 30 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f  0; // We reset O
1a00: 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61  K, no schema cha
1a10: 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  nges..    }.... 
1a20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1a30: 72 69 64 65 20 73 74 72 69 6e 67 20 53 51 4c 69  ride string SQLi
1a40: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20  teLastError().. 
1a50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
1a60: 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e 53 51  rn SQLiteBase.SQ
1a70: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 5f 73  LiteLastError(_s
1a80: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
1a90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1aa0: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
1ab0: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
1ac0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
1ad0: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
1ae0: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
1af0: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
1b00: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
1b10: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
1b20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b30: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
1b40: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
1b50: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49    IntPtr ptr = I
1b60: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
1b70: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
1b80: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 31  .      int n = 1
1b90: 37 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65  7;..      int re
1ba0: 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  tries = 0;..    
1bb0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
1bc0: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
1bd0: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
1be0: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
1bf0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
1c00: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
1c10: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
1c20: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
1c30: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
1c40: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
1c50: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
1c60: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
1c70: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
1c80: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
1c90: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
1ca0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
1cb0: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
1cc0: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
1cd0: 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20  );..      try.. 
1ce0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cf0: 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31 37 20  while ((n == 17 
1d00: 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d  || n == 6 || n =
1d10: 3d 20 35 29 20 26 26 20 72 65 74 72 69 65 73 20  = 5) && retries 
1d20: 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  < 3)..        {.
1d30: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1d40: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
1d50: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
1d60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1d70: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
1d80: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
1d90: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
1da0: 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75  tmt, out ptr, ou
1db0: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
1dc0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
1dd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1de0: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
1df0: 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  e(_sql, psql, b.
1e00: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
1e10: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d  stmt, out ptr);.
1e20: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d  .          len =
1e30: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   -1;..#endif....
1e40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
1e50: 3d 3d 20 31 37 29 0d 0a 20 20 20 20 20 20 20 20  == 17)..        
1e60: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
1e70: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1e80: 66 20 28 6e 20 3d 3d 20 31 29 0d 0a 20 20 20 20  f (n == 1)..    
1e90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ea0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
1eb0: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 4c 61  Compare(SQLiteLa
1ec0: 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72  stError(), "near
1ed0: 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74   \"TYPES\": synt
1ee0: 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e  ax error", Strin
1ef0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
1f00: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
1f10: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
1f20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f30: 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72     int pos = str
1f40: 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29  Sql.IndexOf(';')
1f50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f60: 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20   if (pos == -1) 
1f70: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e  pos = strSql.Len
1f80: 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20  gth - 1;....    
1f90: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65            typede
1fa0: 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  fs = strSql.Subs
1fb0: 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31  tring(0, pos + 1
1fc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1fd0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
1fe0: 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20  l.Substring(pos 
1ff0: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
2000: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
2010: 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   = "";....      
2020: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63          while (c
2030: 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74  md == null && st
2040: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29  rSql.Length > 0)
2050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2060: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2070: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
2080: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
2090: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
20a0: 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e  S, out strRemain
20b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20c0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
20d0: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
20e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d            if (cm
2100: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
2110: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
2120: 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66  SetTypes(typedef
2130: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
2140: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
2150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2160: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
2170: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2190: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
21a0: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
21b0: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
21c0: 28 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72  (SQLiteLastError
21d0: 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20  (), 0, "no such 
21e0: 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45  table: TEMP.SCHE
21f0: 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69  MA", 0, 26, Stri
2200: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2210: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
2220: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
2230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2240: 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20      strRemain = 
2250: 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "";..           
2260: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
2270: 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ma = true;..    
2280: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
22c0: 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28  ensions ext = ((
22d0: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
22e0: 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49  )SQLiteFactory.I
22f0: 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76  nstance).GetServ
2300: 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69  ice(typeof(ISQLi
2310: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
2320: 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53  ns)) as ISQLiteS
2330: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b  chemaExtensions;
2340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2350: 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e      if (ext != n
2360: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2370: 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c          ext.Buil
2380: 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29  dTempSchema(cnn)
2390: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23a0: 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20       while (cmd 
23b0: 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71  == null && strSq
23c0: 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  l.Length > 0).. 
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f0: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
2400: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
2410: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
2420: 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69  MS, out strRemai
2430: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
2440: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
2450: 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20  strRemain;..    
2460: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2480: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
24b0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
24c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d0: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
24e0: 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d  Schema = false;.
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2510: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2530: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36 20  else if (n == 6 
2540: 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 4c 6f  || n == 5) // Lo
2550: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
2560: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
2570: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
2580: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2590: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
25a0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
25b0: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
25c0: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
25d0: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
25e0: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
2600: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
2610: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2620: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
2630: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
2640: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
2650: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
2660: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2670: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
2680: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2690: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
26a0: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
26b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
26d0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
26e0: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
26f0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
2700: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2710: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2730: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
2740: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
2750: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
2760: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
2770: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
2780: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
2790: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
27a0: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
27b0: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
27c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
27d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27e0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
27f0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
2800: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
2810: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
2820: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
2830: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
2840: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
2850: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2860: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
2870: 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e 65 77 20  Zero) cmd = new 
2880: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
2890: 74 68 69 73 2c 20 73 74 6d 74 2c 20 73 74 72 53  this, stmt, strS
28a0: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
28b0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
28c0: 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68  strRemain.Length
28d0: 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d  ), previous);...
28e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
28f0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  cmd;..      }.. 
2900: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
2910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68      {..        h
2920: 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20  andle.Free();.. 
2930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2940: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2950: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
2960: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
2970: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2980: 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20  t index, double 
2990: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
29a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
29b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
29c0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
29d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
29e0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
29f0: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
2a00: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76  e_stmt, index, v
2a10: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
2a20: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
2a30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2a40: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
2a50: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
2a60: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
2a70: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
2a80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2a90: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
2aa0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
2ab0: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
2ac0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
2ad0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2ae0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2af0: 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51  id Bind_Int32(SQ
2b00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2b10: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
2b20: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
2b30: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
2b40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2b50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
2b60: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
2b70: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76  e_stmt, index, v
2b80: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 69 66  alue);..      if
2b90: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
2ba0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
2bb0: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
2bc0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
2bd0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2be0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
2bf0: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
2c00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2c10: 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20  int index, long 
2c20: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
2c30: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
2c40: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2c50: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
2c60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2c70: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
2c80: 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  t64(stmt._sqlite
2c90: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61  _stmt, index, va
2ca0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
2cb0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
2cc0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2cd0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
2ce0: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
2cf0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
2d00: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
2d10: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2d20: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
2d30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2d40: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
2d50: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
2d60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2d70: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
2d80: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
2d90: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2da0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69   int index, stri
2db0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
2dc0: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
2dd0: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
2de0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ;..      int n =
2df0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2e00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
2e10: 64 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  d_text(stmt._sql
2e20: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
2e30: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
2e40: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
2e50: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
2e60: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
2e70: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
2e80: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
2e90: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2eb0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61  ide void Bind_Da
2ec0: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
2ed0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2ee0: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
2ef0: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
2f00: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
2f10: 55 54 46 38 28 64 74 29 3b 0d 0a 20 20 20 20 20  UTF8(dt);..     
2f20: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
2f30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2f40: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 73  ite3_bind_text(s
2f50: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
2f60: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
2f70: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
2f80: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
2f90: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
2fa0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2fb0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
2fc0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
2fd0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2fe0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
2ff0: 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74   Bind_Blob(SQLit
3000: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3010: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
3020: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20  [] blobData)..  
3030: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
3040: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3050: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
3060: 69 6e 64 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73  ind_blob(stmt._s
3070: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
3080: 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f  x, blobData, blo
3090: 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49  bData.Length, (I
30a0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
30b0: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
30c0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
30d0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
30e0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
30f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3100: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3110: 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53  void Bind_Null(S
3120: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3130: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
3140: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
3150: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
3160: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3170: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 74 6d 74  3_bind_null(stmt
3180: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
3190: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 69 66  ndex);..      if
31a0: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
31b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
31c0: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
31d0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
31e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
31f0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
3200: 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51  nd_ParamCount(SQ
3210: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3220: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3230: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
3240: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3250: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
3260: 74 65 72 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  ter_count(stmt._
3270: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
3280: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3290: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
32a0: 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e  ring Bind_ParamN
32b0: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
32c0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
32d0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
32e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
32f0: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
3300: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
3310: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
3320: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3330: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
3340: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
3350: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
3360: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
3370: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
3380: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
3390: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
33a0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
33b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
33c0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
33d0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
33e0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
33f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
3400: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3410: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
3420: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
3430: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
3440: 74 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  t, string paramN
3450: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
3460: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
3470: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3480: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
3490: 65 74 65 72 5f 69 6e 64 65 78 28 73 74 6d 74 2e  eter_index(stmt.
34a0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 54 6f  _sqlite_stmt, To
34b0: 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29  UTF8(paramName))
34c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
34d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
34e0: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  e int ColumnCoun
34f0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
3500: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
3510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
3520: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3530: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
3540: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
3550: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
3560: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3570: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
3580: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69   ColumnName(SQLi
3590: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
35a0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
35b0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
35c0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
35d0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
35e0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
35f0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
3600: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3610: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
3620: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
3630: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
3640: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
3650: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
3660: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3670: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3680: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
3690: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
36a0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
36b0: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
36c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
36d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
36e0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f   TypeAffinity Co
36f0: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c  lumnAffinity(SQL
3700: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
3710: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
3720: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
3730: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
3740: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3750: 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e  olumn_type(stmt.
3760: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3770: 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
3780: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3790: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
37a0: 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74  umnType(SQLiteSt
37b0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
37c0: 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70  t index, out Typ
37d0: 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e  eAffinity nAffin
37e0: 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ity)..    {..   
37f0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66     int len;..#if
3800: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3810: 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  D..      IntPtr 
3820: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
3830: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3840: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
3850: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
3860: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
3870: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
3880: 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se..      len = 
3890: 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  -1;..      IntPt
38a0: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
38b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
38c0: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
38d0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
38e0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
38f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66  ndif..      nAff
3900: 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66  inity = ColumnAf
3910: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
3920: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ex);....      if
3930: 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65   (p != IntPtr.Ze
3940: 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54  ro) return UTF8T
3950: 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
3960: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
3970: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
3980: 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d  tring[] ar = stm
3990: 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e  t.TypeDefinition
39a0: 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  s;..        if (
39b0: 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
39c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
39d0: 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72    if (index < ar
39e0: 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e  .Length && ar[in
39f0: 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dex] != null).. 
3a00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3a10: 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  n ar[index];..  
3a20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3a30: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
3a40: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
3a50: 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69   //switch (nAffi
3a60: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f  nity)..        /
3a70: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  /{..        //  
3a80: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3a90: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
3aa0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
3ab0: 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20  BIGINT";..      
3ac0: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
3ad0: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
3ae0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
3af0: 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d  eturn "DOUBLE";.
3b00: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
3b10: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
3b20: 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lob:..        //
3b30: 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42      return "BLOB
3b40: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
3b50: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
3b60: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
3b70: 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  TEXT";..        
3b80: 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  //}..      }..  
3b90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3ba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
3bb0: 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c   ColumnIndex(SQL
3bc0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
3bd0: 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  t, string column
3be0: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
3bf0: 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75      int x = Colu
3c00: 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a  mnCount(stmt);..
3c10: 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
3c20: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e   n = 0; n < x; n
3c30: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
3c40: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
3c50: 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e  .Compare(columnN
3c60: 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ame, ColumnName(
3c70: 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67  stmt, n), String
3c80: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
3c90: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
3ca0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72   0)..          r
3cb0: 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
3cc0: 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
3cd0: 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  -1;..    }....  
3ce0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3cf0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
3d00: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51  nOriginalName(SQ
3d10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3d20: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
3d30: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
3d40: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
3d50: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
3d60: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
3d70: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
3d80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3d90: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
3da0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
3db0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
3dc0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
3dd0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
3de0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
3df0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
3e00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3e10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
3e20: 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  gin_name(stmt._s
3e30: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
3e40: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
3e50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3e60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3e70: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61   string ColumnDa
3e80: 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74  tabaseName(SQLit
3e90: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3ea0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
3eb0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
3ec0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
3ed0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
3ee0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
3ef0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
3f00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3f10: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
3f20: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
3f30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
3f40: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
3f50: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
3f60: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3f70: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
3f80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3f90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
3fa0: 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  base_name(stmt._
3fb0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
3fc0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
3fd0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
3fe0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3ff0: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
4000: 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53  ableName(SQLiteS
4010: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4020: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4030: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4040: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
4050: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
4060: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4070: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4080: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4090: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f  lumn_table_name_
40a0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
40b0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
40c0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
40d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
40e0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
40f0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
4100: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4110: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
4120: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
4130: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
4140: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
4150: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4160: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
4170: 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74  olumnMetaData(st
4180: 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73  ring dataBase, s
4190: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
41a0: 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
41b0: 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c  string dataType,
41c0: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
41d0: 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74  ateSequence, out
41e0: 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f   bool notNull, o
41f0: 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b  ut bool primaryK
4200: 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74  ey, out bool aut
4210: 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20  oIncrement)..   
4220: 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72   {..      IntPtr
4230: 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a 20   dataTypePtr;.. 
4240: 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
4250: 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20 69  SeqPtr;..      i
4260: 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20  nt nnotNull;..  
4270: 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79      int nprimary
4280: 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Key;..      int 
4290: 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20  nautoInc;..     
42a0: 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 69   int n;..      i
42b0: 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20  nt dtLen;..     
42c0: 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23   int csLen;....#
42d0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
42e0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
42f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4300: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
4310: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
4320: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
4330: 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
4340: 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
4350: 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
4360: 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72 2c  out dataTypePtr,
4370: 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c   out collSeqPtr,
4380: 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f   out nnotNull, o
4390: 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ut nprimaryKey, 
43a0: 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75  out nautoInc, ou
43b0: 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c  t dtLen, out csL
43c0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
43d0: 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     dtLen = -1;..
43e0: 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31        csLen = -1
43f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ;....      n = U
4400: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4410: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
4420: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
4430: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
4440: 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
4450: 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
4460: 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61  olumn), out data
4470: 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c  TypePtr, out col
4480: 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f  lSeqPtr, out nno
4490: 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d  tNull, out nprim
44a0: 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74  aryKey, out naut
44b0: 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  oInc);..#endif..
44c0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
44d0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
44e0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
44f0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
4500: 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54  ;....      dataT
4510: 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ype = UTF8ToStri
4520: 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c 20  ng(dataTypePtr, 
4530: 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63  dtLen);..      c
4540: 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d  ollateSequence =
4550: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
4560: 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29  llSeqPtr, csLen)
4570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75  ;....      notNu
4580: 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d  ll = (nnotNull =
4590: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69  = 1);..      pri
45a0: 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d  maryKey = (nprim
45b0: 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20  aryKey == 1);.. 
45c0: 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65       autoIncreme
45d0: 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d  nt = (nautoInc =
45e0: 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  = 1);..    }....
45f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4600: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
4610: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
4620: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
4630: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
4640: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
4650: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
4660: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4670: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
4680: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4690: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
46a0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d  olumn_double(stm
46b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
46c0: 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a  index);..#else..
46d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
46e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
46f0: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f  3_column_double_
4700: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
4710: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
4720: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
4730: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
4740: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
4750: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4760: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
4770: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
4780: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
4790: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
47a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
47b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
47c0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
47d0: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
47e0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
47f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4800: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4810: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51  long GetInt64(SQ
4820: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
4830: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
4840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e      {..      lon
4850: 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  g value;..#if !P
4860: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4870: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4880: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
4890: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
48a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
48b0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
48c0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
48d0: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
48e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
48f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
4900: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
4910: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
4920: 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  dex, out value);
4930: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4940: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
4950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4960: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
4970: 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c  ring GetText(SQL
4980: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
4990: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
49a0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
49b0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
49c0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
49d0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
49e0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
49f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4a00: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e  3_column_text_in
4a10: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
4a20: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
4a30: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
4a40: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
4a50: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4a60: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4a70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4a80: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
4a90: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4aa0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
4ab0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
4ac0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4ad0: 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61  e DateTime GetDa
4ae0: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
4af0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
4b00: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
4b10: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4b20: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
4b30: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
4b40: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
4b50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4b60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
4b70: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
4b80: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4b90: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
4ba0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
4bb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
4bc0: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
4bd0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4be0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4bf0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
4c00: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
4c10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
4c20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4c30: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
4c40: 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
4c50: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
4c60: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
4c70: 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
4c80: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
4c90: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
4ca0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
4cb0: 50 74 72 20 70 74 72 3b 0d 0a 20 20 20 20 20 20  Ptr ptr;..      
4cc0: 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20  int nlen;..     
4cd0: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
4ce0: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
4cf0: 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
4d00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4d10: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
4d20: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4d30: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
4d40: 20 20 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e     ptr = UnsafeN
4d50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4d60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
4d70: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4d80: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
4d90: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
4da0: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
4db0: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  len;....      if
4dc0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
4dd0: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
4de0: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
4df0: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
4e00: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
4e10: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
4e20: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
4e30: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
4e40: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
4e50: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
4e60: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 4d 61  > 0)..        Ma
4e70: 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
4e80: 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
4e90: 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
4ea0: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
4eb0: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
4ec0: 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d    else nCopied =
4ed0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74   0;....      ret
4ee0: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
4ef0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4f00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
4f10: 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
4f20: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
4f30: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
4f40: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
4f50: 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
4f60: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
4f70: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
4f80: 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
4f90: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
4fa0: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
4fb0: 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
4fc0: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
4fd0: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
4fe0: 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
4ff0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
5000: 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
5010: 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
5020: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
5030: 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
5040: 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
5050: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
5060: 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
5070: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
5080: 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
5090: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
50a0: 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
50b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
50c0: 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
50d0: 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
50e0: 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
50f0: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
5100: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
5110: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
5120: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
5130: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
5140: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5150: 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
5160: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5170: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
5180: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5190: 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
51a0: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
51b0: 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
51c0: 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
51d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
51e0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
51f0: 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
5200: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
5210: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
5220: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
5230: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
5240: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
5250: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
5260: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5270: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
5280: 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72  eateFunction(str
5290: 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c  ing strFunction,
52a0: 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c   int nArgs, bool
52b0: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51   needCollSeq, SQ
52c0: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
52d0: 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  c, SQLiteCallbac
52e0: 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69  k funcstep, SQLi
52f0: 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20  teFinalCallback 
5300: 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20  funcfinal)..    
5310: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d  {..      int n;.
5320: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
5330: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
5340: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5350: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
5360: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
5370: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
5380: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
5390: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
53a0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
53b0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
53c0: 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
53d0: 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
53e0: 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  0);..      if (n
53f0: 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66   == 0) n = Unsaf
5400: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5410: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
5420: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
5430: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
5440: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
5450: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
5460: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
5470: 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
5480: 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
5490: 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
54a0: 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
54b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
54c0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
54d0: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
54e0: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
54f0: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
5500: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
5510: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
5520: 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
5530: 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55  f (n == 0) n = U
5540: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5550: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
5560: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
5570: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
5580: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
5590: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
55a0: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
55b0: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
55c0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
55d0: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
55e0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
55f0: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
5600: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
5610: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5620: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43  ide void CreateC
5630: 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
5640: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
5650: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
5660: 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
5670: 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20  ion func16)..   
5680: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
5690: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
56a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
56b0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
56c0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
56d0: 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
56e0: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
56f0: 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
5700: 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66   == 0) n = Unsaf
5710: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5720: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
5730: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
5740: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
5750: 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 1, IntPtr.Ze
5760: 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20  ro, func);..    
5770: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
5780: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5790: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
57a0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
57b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
57c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
57d0: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
57e0: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
57f0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
5800: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
5810: 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74  t, string s1, st
5820: 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d  ring s2)..    {.
5830: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
5840: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
5850: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
5860: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
5870: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
5880: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
5890: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
58a0: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
58b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
58c0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
58d0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
58e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
58f0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
5900: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
5910: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
5920: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
5930: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
5940: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
5950: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
5960: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
5970: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
5980: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
5990: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
59a0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
59b0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
59c0: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
59d0: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
59e0: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
59f0: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
5a00: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
5a10: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
5a20: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
5a30: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
5a40: 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  s1);..      b2 =
5a50: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
5a60: 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(s2);....    
5a70: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
5a80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5a90: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
5aa0: 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74  lcompare(context
5ab0: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
5ac0: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
5ad0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
5ae0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
5af0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
5b00: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
5b10: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5b20: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
5b30: 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
5b40: 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
5b50: 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
5b60: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
5b70: 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72   char[] c1, char
5b80: 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  [] c2)..    {..#
5b90: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
5ba0: 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
5bb0: 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
5bc0: 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
5bd0: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
5be0: 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
5bf0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
5c00: 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
5c10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
5c20: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
5c30: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
5c40: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
5c50: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
5c60: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
5c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
5c80: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
5c90: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
5ca0: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
5cb0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
5cc0: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
5cd0: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
5ce0: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
5cf0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
5d00: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
5d10: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
5d20: 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
5d30: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
5d40: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
5d50: 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
5d60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
5d70: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
5d80: 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
5d90: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31  rter.GetBytes(c1
5da0: 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
5db0: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
5dc0: 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(c2);....      
5dd0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
5de0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5df0: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
5e00: 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20  ompare(context, 
5e10: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
5e20: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
5e30: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
5e40: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
5e50: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
5e60: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
5e70: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5e80: 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74   override Collat
5e90: 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43  ionSequence GetC
5ea0: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
5eb0: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20  (SQLiteFunction 
5ec0: 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e  func, IntPtr con
5ed0: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  text)..    {..#i
5ee0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
5ef0: 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74  RD..      Collat
5f00: 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20  ionSequence seq 
5f10: 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53  = new CollationS
5f20: 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20  equence();..    
5f30: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
5f40: 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20    int type;..   
5f50: 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20     int enc;..   
5f60: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
5f70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5f80: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
5f90: 74 5f 63 6f 6c 6c 73 65 71 28 63 6f 6e 74 65 78  t_collseq(contex
5fa0: 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74  t, out type, out
5fb0: 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   enc, out len);.
5fc0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21  ...      if (p !
5fd0: 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65  = null) seq.Name
5fe0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
5ff0: 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
6000: 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c  seq.Type = (Coll
6010: 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79  ationTypeEnum)ty
6020: 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f  pe;..      seq._
6030: 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20  func = func;..  
6040: 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67      seq.Encoding
6050: 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63   = (CollationEnc
6060: 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a  odingEnum)enc;..
6070: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73  ..      return s
6080: 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  eq;..#else..    
6090: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
60a0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
60b0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
60c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
60d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
60e0: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
60f0: 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c  eBytes(IntPtr p,
6100: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
6110: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
6120: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
6130: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
6140: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
6150: 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c  r;..      int nl
6160: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  en;..      int n
6170: 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
6180: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20  ;....      nlen 
6190: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
61a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
61b0: 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 20  lue_bytes(p);.. 
61c0: 20 20 20 20 20 70 74 72 20 3d 20 55 6e 73 61 66       ptr = Unsaf
61d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
61e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
61f0: 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  b(p);....      i
6200: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
6210: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
6220: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
6230: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
6240: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
6250: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
6260: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
6270: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
6280: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
6290: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
62a0: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
62b0: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
62c0: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
62d0: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
62e0: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
62f0: 72 2e 54 6f 49 6e 74 33 32 28 29 20 2b 20 6e 44  r.ToInt32() + nD
6300: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
6310: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
6320: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
6330: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
6340: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
6350: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
6360: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6370: 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
6380: 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c  tParamValueDoubl
6390: 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
63a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62     {..      doub
63b0: 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  le value;..#if !
63c0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
63d0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
63e0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
63f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6400: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
6410: 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  e(ptr);..#else..
6420: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
6430: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6440: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
6450: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
6460: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
6470: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
6480: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
6490: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
64a0: 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61  ride int GetPara
64b0: 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50  mValueInt32(IntP
64c0: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
64d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
64e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
64f0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
6500: 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  nt(ptr);..    }.
6510: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6520: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
6530: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
6540: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
6550: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34    {..      Int64
6560: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
6570: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6580: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
6590: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
65a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
65b0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70  e3_value_int64(p
65c0: 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
65d0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
65e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
65f0: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
6600: 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75  op(ptr, out valu
6610: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
6620: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
6630: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6640: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6650: 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d   string GetParam
6660: 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72  ValueText(IntPtr
6670: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69   ptr)..    {..#i
6680: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
6690: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
66a0: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
66b0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
66c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
66d0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
66e0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72  text_interop(ptr
66f0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
6700: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6710: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
6720: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
6730: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6740: 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c  value_text(ptr),
6750: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
6760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6770: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
6780: 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50 61  peAffinity GetPa
6790: 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74  ramValueType(Int
67a0: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
67b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
67c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
67d0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
67e0: 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20  type(ptr);..    
67f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6800: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
6810: 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74  ReturnBlob(IntPt
6820: 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b  r context, byte[
6830: 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  ] value)..    {.
6840: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
6850: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6860: 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63  e3_result_blob(c
6870: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76  ontext, value, v
6880: 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e  alue.Length, (In
6890: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
68a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
68b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
68c0: 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e   ReturnDouble(In
68d0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f  tPtr context, do
68e0: 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  uble value)..   
68f0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
6900: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6910: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
6920: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6930: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
6940: 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  ble(context, val
6950: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
6960: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
6970: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
6980: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74  esult_double_int
6990: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
69a0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
69b0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
69c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
69d0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  e void ReturnErr
69e0: 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
69f0: 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
6a00: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
6a10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6a20: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
6a30: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
6a40: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
6a50: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a  value.Length);..
6a60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6a70: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
6a80: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28  oid ReturnInt32(
6a90: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
6aa0: 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
6ab0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
6ac0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ad0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
6ae0: 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
6af0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6b00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6b10: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
6b20: 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
6b30: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
6b40: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
6b50: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
6b60: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
6b70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6b80: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
6b90: 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61  nt64(context, va
6ba0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
6bb0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
6bc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6bd0: 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74  result_int64_int
6be0: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
6bf0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
6c00: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
6c10: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6c20: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c  e void ReturnNul
6c30: 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  l(IntPtr context
6c40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6c50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6c60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
6c70: 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29  lt_null(context)
6c80: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c90: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6ca0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78  e void ReturnTex
6cb0: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
6cc0: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
6cd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79  .    {..      by
6ce0: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
6cf0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55  value);..      U
6d00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6d10: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
6d20: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
6d30: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62  ToUTF8(value), b
6d40: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
6d50: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
6d60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6d70: 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50  al override IntP
6d80: 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74  tr AggregateCont
6d90: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
6da0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
6db0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
6dc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6dd0: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
6de0: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  ontext(context, 
6df0: 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  1);..    }....  
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 53 65 74 50 61 73 73  ide void SetPass
6e20: 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
6e30: 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
6e40: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  {..      int n =
6e50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6e60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79  hods.sqlite3_key
6e70: 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42  (_sql, passwordB
6e80: 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79  ytes, passwordBy
6e90: 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
6ea0: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
6eb0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6ec0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
6ed0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
6ee0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6ef0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6f00: 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
6f10: 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
6f20: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
6f30: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
6f40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6f50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
6f60: 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61  ekey(_sql, newPa
6f70: 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65  sswordBytes, (ne
6f80: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  wPasswordBytes =
6f90: 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65  = null) ? 0 : ne
6fa0: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c  wPasswordBytes.L
6fb0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
6fc0: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
6fd0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6fe0: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
6ff0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
7000: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7010: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
7020: 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
7030: 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
7040: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
7050: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7060: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7070: 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
7080: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
7090: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
70a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
70b0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
70c0: 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
70d0: 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
70e0: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
70f0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
7100: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7110: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
7120: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
7130: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
7140: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7150: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
7160: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
7170: 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
7180: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
7190: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
71a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
71b0: 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
71c0: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
71d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
71e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
71f0: 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
7200: 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
7210: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
7220: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
7230: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7240: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
7250: 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
7260: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
7270: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
7280: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7290: 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
72a0: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
72b0: 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
72c0: 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
72d0: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
72e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
72f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
7300: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
7310: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
7320: 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
7330: 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
7340: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7350: 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63  me="index">The c
7360: 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72  olumn index to r
7370: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
7380: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7390: 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
73a0: 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74  ype of data cont
73b0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
73c0: 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69  umn.  If Uniniti
73d0: 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e  alized, this fun
73e0: 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69  ction will retri
73f0: 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65  eve the datatype
7400: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
7410: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7420: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
7430: 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
7440: 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
7450: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7460: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
7470: 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74  etValue(SQLiteSt
7480: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
7490: 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
74a0: 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
74b0: 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c  .      if (IsNul
74c0: 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20  l(stmt, index)) 
74d0: 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
74e0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
74f0: 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74  Affinity aff = t
7500: 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20  yp.Affinity;..  
7510: 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
7520: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
7530: 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
7540: 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
7550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
7560: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
7570: 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
7580: 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
7590: 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
75a0: 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
75b0: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
75c0: 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d   (aff)..      {.
75d0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
75e0: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7600: 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
7610: 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41  pe.Guid && typ.A
7620: 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
7630: 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20  ffinity.Text).. 
7640: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7650: 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65  n new Guid(GetTe
7660: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  xt(stmt, index))
7670: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
7680: 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42  nt n = (int)GetB
7690: 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
76a0: 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29  , 0, null, 0, 0)
76b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74  ;..          byt
76c0: 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65  e[] b = new byte
76d0: 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  [n];..          
76e0: 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
76f0: 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e  ndex, 0, b, 0, n
7700: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7710: 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
7720: 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e  DbType.Guid && n
7730: 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20   == 16)..       
7740: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
7750: 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20  Guid(b);....    
7760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d        return b;.
7770: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
7780: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
7790: 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ime:..          
77a0: 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69  return GetDateTi
77b0: 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  me(stmt, index);
77c0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
77d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
77e0: 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  le:..          i
77f0: 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
7800: 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
7810: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
7820: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
7830: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7840: 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
7850: 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ype(GetDouble(st
7860: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
7870: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  ull);..        c
7880: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
7890: 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
78a0: 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
78b0: 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
78c0: 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
78d0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
78e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
78f0: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
7900: 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28  geType(GetInt64(
7910: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
7920: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
7930: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
7940: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
7950: 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
7960: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
7970: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7980: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
7990: 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
79a0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
79b0: 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69   stmt, int db, i
79c0: 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20  nt rootPage)..  
79d0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
79e0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
79f0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
7a00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7a10: 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72  te3_table_cursor
7a20: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7a30: 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65  mt, db, rootPage
7a40: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
7a50: 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e   return -1;..#en
7a60: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
7a70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7a80: 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49  ide long GetRowI
7a90: 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74  dForCursor(SQLit
7aa0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7ab0: 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20   int cursor)..  
7ac0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
7ad0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
7ae0: 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20   long rowid;..  
7af0: 20 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73      int rc = Uns
7b00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7b10: 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f  .sqlite3_cursor_
7b20: 72 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69  rowid(stmt._sqli
7b30: 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c  te_stmt, cursor,
7b40: 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20   out rowid);..  
7b50: 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 30 29      if (rc == 0)
7b60: 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a   return rowid;..
7b70: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
7b80: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7b90: 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69  return 0;..#endi
7ba0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
7bb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7bc0: 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43  e void GetIndexC
7bd0: 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66  olumnExtendedInf
7be0: 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73  o(string databas
7bf0: 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c  e, string index,
7c00: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
7c10: 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65  out int sortMode
7c20: 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f  , out int onErro
7c30: 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  r, out string co
7c40: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29  llationSequence)
7c50: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
7c60: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
7c70: 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
7c80: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  ;..      int col
7c90: 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  llen;..      int
7ca0: 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63   rc;....      rc
7cb0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7cc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
7cd0: 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f  ndex_column_info
7ce0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
7cf0: 6f 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c  oUTF8(database),
7d00: 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20   ToUTF8(index), 
7d10: 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
7d20: 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75  out sortMode, ou
7d30: 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63  t onError, out c
7d40: 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e  oll, out colllen
7d50: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
7d60: 20 21 3d 20 30 29 20 74 68 72 6f 77 20 6e 65 77   != 0) throw new
7d70: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7d80: 28 72 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20  (rc, "");....   
7d90: 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
7da0: 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
7db0: 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
7dc0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
7dd0: 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
7de0: 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
7df0: 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
7e00: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
7e10: 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
7e20: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d  ..    }..  }..}.
7e30: 0a                                               .