System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8552a773f4d218bdea072c50786dc2a8c01422b4:


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 0d 0a 20 20  ng System;....  
0160: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0170: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 6e   /// This intern
0180: 61 6c 20 63 6c 61 73 73 20 70 72 6f 76 69 64 65  al class provide
0190: 73 20 74 68 65 20 66 6f 75 6e 64 61 74 69 6f 6e  s the foundation
01a0: 20 6f 66 20 53 51 4c 69 74 65 20 73 75 70 70 6f   of SQLite suppo
01b0: 72 74 2e 20 20 49 74 20 64 65 66 69 6e 65 73 20  rt.  It defines 
01c0: 61 6c 6c 20 74 68 65 20 61 62 73 74 72 61 63 74  all the abstract
01d0: 20 6d 65 6d 62 65 72 73 20 6e 65 65 64 65 64 20   members needed 
01e0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0d 0a 20 20  to implement..  
01f0: 2f 2f 2f 20 61 20 53 51 4c 69 74 65 20 64 61 74  /// a SQLite dat
0200: 61 20 70 72 6f 76 69 64 65 72 2c 20 61 6e 64 20  a provider, and 
0210: 69 6e 68 65 72 69 74 73 20 66 72 6f 6d 20 53 51  inherits from SQ
0220: 4c 69 74 65 43 6f 6e 76 65 72 74 20 77 68 69 63  LiteConvert whic
0230: 68 20 61 6c 6c 6f 77 73 20 66 6f 72 20 73 69 6d  h allows for sim
0240: 70 6c 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  ple translations
0250: 20 6f 66 20 73 74 72 69 6e 67 20 74 6f 20 61 6e   of string to an
0260: 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 2e 0d 0a  d from SQLite...
0270: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0280: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73  ..  internal abs
0290: 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69  tract class SQLi
02a0: 74 65 42 61 73 65 20 3a 20 53 51 4c 69 74 65 43  teBase : SQLiteC
02b0: 6f 6e 76 65 72 74 2c 20 49 44 69 73 70 6f 73 61  onvert, IDisposa
02c0: 62 6c 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  ble..  {..    in
02d0: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73  ternal SQLiteBas
02e0: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
02f0: 61 74 73 20 66 6d 74 29 0d 0a 20 20 20 20 20 20  ats fmt)..      
0300: 3a 20 62 61 73 65 28 66 6d 74 29 20 7b 20 7d 0d  : base(fmt) { }.
0310: 0a 0d 0a 20 20 20 20 73 74 61 74 69 63 20 69 6e  ...    static in
0320: 74 65 72 6e 61 6c 20 6f 62 6a 65 63 74 20 5f 6c  ternal object _l
0330: 6f 63 6b 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  ock = new object
0340: 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ();....    /// <
0350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0360: 2f 20 52 65 74 75 72 6e 73 20 61 20 73 74 72 69  / Returns a stri
0370: 6e 67 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ng representing 
0380: 74 68 65 20 61 63 74 69 76 65 20 76 65 72 73 69  the active versi
0390: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 0d 0a 20 20  on of SQLite..  
03a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
03b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
03c0: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 56  bstract string V
03d0: 65 72 73 69 6f 6e 20 7b 20 67 65 74 3b 20 7d 0d  ersion { get; }.
03e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
03f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
0400: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
0410: 66 20 63 68 61 6e 67 65 73 20 74 68 65 20 6c 61  f changes the la
0420: 73 74 20 65 78 65 63 75 74 69 6e 67 20 69 6e 73  st executing ins
0430: 65 72 74 2f 75 70 64 61 74 65 20 63 61 75 73 65  ert/update cause
0440: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
0450: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
0460: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
0470: 74 20 43 68 61 6e 67 65 73 20 7b 20 67 65 74 3b  t Changes { get;
0480: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
0490: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
04a0: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
04b0: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
04c0: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
04d0: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
04e0: 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74 69  rent config opti
04f0: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 65  ons...    /// We
0500: 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20   depend on auto 
0510: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74  initialization t
0520: 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20  o recover...    
0530: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0540: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0550: 74 72 61 63 74 20 69 6e 74 20 53 68 75 74 64 6f  tract int Shutdo
0560: 77 6e 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  wn();..    /// <
0570: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0580: 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  / Returns non-ze
0590: 72 6f 20 69 66 20 61 20 64 61 74 61 62 61 73 65  ro if a database
05a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 6f   connection is o
05b0: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
05c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
05d0: 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74  / <returns></ret
05e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
05f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f  nal abstract boo
0600: 6c 20 49 73 4f 70 65 6e 28 29 3b 0d 0a 20 20 20  l IsOpen();..   
0610: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0620: 20 20 20 20 2f 2f 2f 20 4f 70 65 6e 73 20 61 20      /// Opens a 
0630: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f  database...    /
0640: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0650: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
0660: 0d 0a 20 20 20 20 2f 2f 2f 20 49 6d 70 6c 65 6d  ..    /// Implem
0670: 65 6e 74 65 72 73 20 73 68 6f 75 6c 64 20 63 61  enters should ca
0680: 6c 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ll SQLiteFunctio
0690: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
06a0: 29 20 61 6e 64 20 73 61 76 65 20 74 68 65 20 61  ) and save the a
06b0: 72 72 61 79 20 61 66 74 65 72 20 6f 70 65 6e 69  rray after openi
06c0: 6e 67 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  ng a connection.
06d0: 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 62 69 6e 64  .    /// to bind
06e0: 20 61 6c 6c 20 61 74 74 72 69 62 75 74 65 64 20   all attributed 
06f0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
0700: 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61  ctions and colla
0710: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74  ting sequences t
0720: 6f 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63  o the new connec
0730: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
0740: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  /remarks>..    /
0750: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0760: 73 74 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68 65  strFilename">The
0770: 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65   filename of the
0780: 20 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70 65   database to ope
0790: 6e 2e 20 20 53 51 4c 69 74 65 20 61 75 74 6f 6d  n.  SQLite autom
07a0: 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 73  atically creates
07b0: 20 69 74 20 69 66 20 69 74 20 64 6f 65 73 6e 27   it if it doesn'
07c0: 74 20 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d 3e  t exist.</param>
07d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
07e0: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
07f0: 65 20 6f 70 65 6e 20 66 6c 61 67 73 20 74 6f 20  e open flags to 
0800: 75 73 65 20 77 68 65 6e 20 63 72 65 61 74 69 6e  use when creatin
0810: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
0820: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0830: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
0840: 61 78 50 6f 6f 6c 53 69 7a 65 22 3e 54 68 65 20  axPoolSize">The 
0850: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  maximum size of 
0860: 74 68 65 20 70 6f 6f 6c 20 66 6f 72 20 74 68 65  the pool for the
0870: 20 67 69 76 65 6e 20 66 69 6c 65 6e 61 6d 65 3c   given filename<
0880: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0890: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 75 73   <param name="us
08a0: 65 50 6f 6f 6c 22 3e 49 66 20 74 72 75 65 2c 20  ePool">If true, 
08b0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63  the connection c
08c0: 61 6e 20 62 65 20 70 75 6c 6c 65 64 20 66 72 6f  an be pulled fro
08d0: 6d 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  m the connection
08e0: 20 70 6f 6f 6c 3c 2f 70 61 72 61 6d 3e 0d 0a 20   pool</param>.. 
08f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
0900: 72 61 63 74 20 76 6f 69 64 20 4f 70 65 6e 28 73  ract void Open(s
0910: 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d  tring strFilenam
0920: 65 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  e, SQLiteOpenFla
0930: 67 73 45 6e 75 6d 20 66 6c 61 67 73 2c 20 69 6e  gsEnum flags, in
0940: 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62  t maxPoolSize, b
0950: 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 3b 0d 0a 20  ool usePool);.. 
0960: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0970: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f 73 65 73  ..    /// Closes
0980: 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 2d 6f   the currently-o
0990: 70 65 6e 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  pen database... 
09a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61  >..    /// <rema
09c0: 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 66  rks>..    /// Af
09d0: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
09e0: 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64   has been closed
09f0: 20 69 6d 70 6c 65 6d 65 74 65 72 73 20 73 68 6f   implemeters sho
0a00: 75 6c 64 20 63 61 6c 6c 20 53 51 4c 69 74 65 46  uld call SQLiteF
0a10: 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 46 75  unction.UnbindFu
0a20: 6e 63 74 69 6f 6e 73 28 29 20 74 6f 20 64 65 61  nctions() to dea
0a30: 6c 6c 6f 63 61 74 65 20 61 6c 6c 20 69 6e 74 65  llocate all inte
0a40: 72 6f 70 20 61 6c 6c 6f 63 61 74 65 64 0d 0a 20  rop allocated.. 
0a50: 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 61 73     /// memory as
0a60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
0a70: 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66  e user-defined f
0a80: 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c  unctions and col
0a90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
0aa0: 20 74 69 65 64 20 74 6f 20 74 68 65 20 63 6c 6f   tied to the clo
0ab0: 73 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  sed connection..
0ac0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
0ad0: 6b 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ks>..    interna
0ae0: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
0af0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 2f 2f  Close();..    //
0b00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b10: 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 62 75   /// Sets the bu
0b20: 73 79 20 74 69 6d 65 6f 75 74 20 6f 6e 20 74 68  sy timeout on th
0b30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 53  e connection.  S
0b40: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 77 69 6c  QLiteCommand wil
0b50: 6c 20 63 61 6c 6c 20 74 68 69 73 20 62 65 66 6f  l call this befo
0b60: 72 65 20 65 78 65 63 75 74 69 6e 67 20 61 6e 79  re executing any
0b70: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f   command...    /
0b80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0b90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0ba0: 6d 65 3d 22 6e 54 69 6d 65 6f 75 74 4d 53 22 3e  me="nTimeoutMS">
0bb0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69  The number of mi
0bc0: 6c 6c 69 73 65 63 6f 6e 64 73 20 74 6f 20 77 61  lliseconds to wa
0bd0: 69 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  it before return
0be0: 69 6e 67 20 53 51 4c 49 54 45 5f 42 55 53 59 3c  ing SQLITE_BUSY<
0bf0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
0c00: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
0c10: 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69  oid SetTimeout(i
0c20: 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  nt nTimeoutMS);.
0c30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0c40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
0c50: 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  rns the text of 
0c60: 74 68 65 20 6c 61 73 74 20 65 72 72 6f 72 20 69  the last error i
0c70: 73 73 75 65 64 20 62 79 20 53 51 4c 69 74 65 0d  ssued by SQLite.
0c80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0c90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
0ca0: 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e  turns></returns>
0cb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0cc0: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 53  bstract string S
0cd0: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
0ce0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
0cf0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0d00: 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20  When pooling is 
0d10: 65 6e 61 62 6c 65 64 2c 20 66 6f 72 63 65 20 74  enabled, force t
0d20: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  his connection t
0d30: 6f 20 62 65 20 64 69 73 70 6f 73 65 64 20 72 61  o be disposed ra
0d40: 74 68 65 72 20 74 68 61 6e 20 72 65 74 75 72 6e  ther than return
0d50: 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 0d 0a  ed to the pool..
0d60: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0d70: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0d80: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43   abstract void C
0d90: 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20  learPool();.... 
0da0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0db0: 0d 0a 20 20 20 20 2f 2f 2f 20 50 72 65 70 61 72  ..    /// Prepar
0dc0: 65 73 20 61 20 53 51 4c 20 73 74 61 74 65 6d 65  es a SQL stateme
0dd0: 6e 74 20 66 6f 72 20 65 78 65 63 75 74 69 6f 6e  nt for execution
0de0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0df0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
0e00: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22  param name="cnn"
0e10: 3e 54 68 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e  >The source conn
0e20: 65 63 74 69 6f 6e 20 70 72 65 70 61 72 69 6e 67  ection preparing
0e30: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43   the command.  C
0e40: 61 6e 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61  an be null for a
0e50: 6e 79 20 63 61 6c 6c 65 72 20 65 78 63 65 70 74  ny caller except
0e60: 20 4c 49 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20   LINQ</param>.. 
0e70: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e80: 6d 65 3d 22 73 74 72 53 71 6c 22 3e 54 68 65 20  me="strSql">The 
0e90: 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74  SQL command text
0ea0: 20 74 6f 20 70 72 65 70 61 72 65 3c 2f 70 61 72   to prepare</par
0eb0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0ec0: 72 61 6d 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f  ram name="previo
0ed0: 75 73 22 3e 54 68 65 20 70 72 65 76 69 6f 75 73  us">The previous
0ee0: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 61 20   statement in a 
0ef0: 6d 75 6c 74 69 2d 73 74 61 74 65 6d 65 6e 74 20  multi-statement 
0f00: 63 6f 6d 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c  command, or null
0f10: 20 69 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   if no previous 
0f20: 73 74 61 74 65 6d 65 6e 74 20 65 78 69 73 74 73  statement exists
0f30: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0f40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
0f50: 69 6d 65 6f 75 74 4d 53 22 3e 54 68 65 20 74 69  imeoutMS">The ti
0f60: 6d 65 6f 75 74 20 74 6f 20 77 61 69 74 20 62 65  meout to wait be
0f70: 66 6f 72 65 20 61 62 6f 72 74 69 6e 67 20 74 68  fore aborting th
0f80: 65 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d  e prepare</param
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0fa0: 6d 20 6e 61 6d 65 3d 22 73 74 72 52 65 6d 61 69  m name="strRemai
0fb0: 6e 22 3e 54 68 65 20 72 65 6d 61 69 6e 64 65 72  n">The remainder
0fc0: 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   of the statemen
0fd0: 74 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20 70  t that was not p
0fe0: 72 6f 63 65 73 73 65 64 2e 20 20 45 61 63 68 20  rocessed.  Each 
0ff0: 63 61 6c 6c 20 74 6f 20 70 72 65 70 61 72 65 20  call to prepare 
1000: 70 61 72 73 65 73 20 74 68 65 0d 0a 20 20 20 20  parses the..    
1010: 2f 2f 2f 20 53 51 4c 20 75 70 20 74 6f 20 74 6f  /// SQL up to to
1020: 20 65 69 74 68 65 72 20 74 68 65 20 65 6e 64 20   either the end 
1030: 6f 66 20 74 68 65 20 74 65 78 74 20 6f 72 20 74  of the text or t
1040: 6f 20 74 68 65 20 66 69 72 73 74 20 73 65 6d 69  o the first semi
1050: 2d 63 6f 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72  -colon delimiter
1060: 2e 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67  .  The remaining
1070: 20 74 65 78 74 20 69 73 20 72 65 74 75 72 6e 65   text is returne
1080: 64 0d 0a 20 20 20 20 2f 2f 2f 20 68 65 72 65 20  d..    /// here 
1090: 66 6f 72 20 61 20 73 75 62 73 65 71 75 65 6e 74  for a subsequent
10a0: 20 63 61 6c 6c 20 74 6f 20 50 72 65 70 61 72 65   call to Prepare
10b0: 28 29 20 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65  () until all the
10c0: 20 74 65 78 74 20 68 61 73 20 62 65 65 6e 20 70   text has been p
10d0: 72 6f 63 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d  rocessed.</param
10e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
10f0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 6e 20 69  rns>Returns an i
1100: 6e 69 74 69 61 6c 69 7a 65 64 20 53 51 4c 69 74  nitialized SQLit
1110: 65 53 74 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74  eStatement.</ret
1120: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1130: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c  nal abstract SQL
1140: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65  iteStatement Pre
1150: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  pare(SQLiteConne
1160: 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e  ction cnn, strin
1170: 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65  g strSql, SQLite
1180: 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f  Statement previo
1190: 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74  us, uint timeout
11a0: 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73  MS, out string s
11b0: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
11c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11d0: 20 20 20 2f 2f 2f 20 53 74 65 70 73 20 74 68 72     /// Steps thr
11e0: 6f 75 67 68 20 61 20 70 72 65 70 61 72 65 64 20  ough a prepared 
11f0: 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
1200: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1210: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1220: 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 53  ame="stmt">The S
1230: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74  QLiteStatement t
1240: 6f 20 73 74 65 70 20 74 68 72 6f 75 67 68 3c 2f  o step through</
1250: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1260: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
1270: 20 61 20 72 6f 77 20 77 61 73 20 72 65 74 75 72   a row was retur
1280: 6e 65 64 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f  ned, False if no
1290: 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
12a0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
12b0: 61 63 74 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  act bool Step(SQ
12c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
12d0: 6d 74 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  mt);..    /// <s
12e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12f0: 20 52 65 73 65 74 73 20 61 20 70 72 65 70 61 72   Resets a prepar
1300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 73 6f 20  ed statement so 
1310: 69 74 20 63 61 6e 20 62 65 20 65 78 65 63 75 74  it can be execut
1320: 65 64 20 61 67 61 69 6e 2e 20 20 49 66 20 74 68  ed again.  If th
1330: 65 20 65 72 72 6f 72 20 72 65 74 75 72 6e 65 64  e error returned
1340: 20 69 73 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   is SQLITE_SCHEM
1350: 41 2c 20 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61  A, ..    /// tra
1360: 6e 73 70 61 72 65 6e 74 6c 79 20 61 74 74 65 6d  nsparently attem
1370: 70 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  pt to rebuild th
1380: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1390: 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72  and throw an err
13a0: 6f 72 20 69 66 20 74 68 61 74 20 77 61 73 20 6e  or if that was n
13b0: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20  ot possible...  
13c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
13d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13e0: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
13f0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 72 65   statement to re
1400: 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  set</param>..   
1410: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
1420: 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20  turns -1 if the 
1430: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 20 77  schema changed w
1440: 68 69 6c 65 20 72 65 73 65 74 74 69 6e 67 2c 20  hile resetting, 
1450: 30 20 69 66 20 74 68 65 20 72 65 73 65 74 20 77  0 if the reset w
1460: 61 73 20 73 75 63 65 73 73 66 75 6c 20 6f 72 20  as sucessful or 
1470: 36 20 28 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  6 (SQLITE_LOCKED
1480: 29 20 69 66 20 74 68 65 20 72 65 73 65 74 20 66  ) if the reset f
1490: 61 69 6c 65 64 20 64 75 65 20 74 6f 20 61 20 6c  ailed due to a l
14a0: 6f 63 6b 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ock</returns>.. 
14b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
14c0: 72 61 63 74 20 69 6e 74 20 52 65 73 65 74 28 53  ract int Reset(S
14d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
14e0: 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  tmt);..    inter
14f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1500: 64 20 43 61 6e 63 65 6c 28 29 3b 0d 0a 0d 0a 20  d Cancel();.... 
1510: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1520: 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44  ract void Bind_D
1530: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
1540: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
1550: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
1560: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
1570: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1580: 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c  d Bind_Int32(SQL
1590: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
15a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 49 6e  t, int index, In
15b0: 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t32 value);..   
15c0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
15d0: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  ct void Bind_Int
15e0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
15f0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
1600: 65 78 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29  ex, Int64 value)
1610: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1620: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1630: 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74  nd_Text(SQLiteSt
1640: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1650: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
1660: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
1670: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
1680: 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51  oid Bind_Blob(SQ
1690: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
16a0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  mt, int index, b
16b0: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 3b  yte[] blobData);
16c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
16d0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
16e0: 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74  d_DateTime(SQLit
16f0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
1700: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
1710: 54 69 6d 65 20 64 74 29 3b 0d 0a 20 20 20 20 69  Time dt);..    i
1720: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1730: 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28   void Bind_Null(
1740: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1750: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
1760: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
1770: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 42  l abstract int B
1780: 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53  ind_ParamCount(S
1790: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
17a0: 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  tmt);..    inter
17b0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
17c0: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
17d0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
17e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
17f0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
1800: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
1810: 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28  Bind_ParamIndex(
1820: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1830: 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 70 61 72  stmt, string par
1840: 61 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  amName);....    
1850: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1860: 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t int ColumnCoun
1870: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
1880: 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e  t stmt);..    in
1890: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
18a0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
18b0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
18c0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
18d0: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
18e0: 6c 20 61 62 73 74 72 61 63 74 20 54 79 70 65 41  l abstract TypeA
18f0: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
1900: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
1910: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
1920: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
1930: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1940: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
1950: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1960: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
1970: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
1980: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 3b 0d  ity nAffinity);.
1990: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
19a0: 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d  stract int Colum
19b0: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
19c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
19d0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b  ing columnName);
19e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
19f0: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 43  bstract string C
1a00: 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
1a10: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1a20: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
1a30: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
1a40: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
1a50: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
1a60: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
1a70: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
1a80: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
1a90: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1aa0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
1ab0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
1ac0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
1ad0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
1ae0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1af0: 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  id ColumnMetaDat
1b00: 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73  a(string dataBas
1b10: 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c  e, string table,
1b20: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
1b30: 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74 61 54  out string dataT
1b40: 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  ype, out string 
1b50: 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c  collateSequence,
1b60: 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c   out bool notNul
1b70: 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d  l, out bool prim
1b80: 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c  aryKey, out bool
1b90: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b   autoIncrement);
1ba0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
1bb0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 47 65 74  bstract void Get
1bc0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
1bd0: 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
1be0: 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
1bf0: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
1c00: 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f  lumn, out int so
1c10: 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20  rtMode, out int 
1c20: 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72  onError, out str
1c30: 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
1c40: 75 65 6e 63 65 29 3b 0d 0a 0d 0a 20 20 20 20 69  uence);....    i
1c50: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1c60: 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c   double GetDoubl
1c70: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1c80: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
1c90: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
1ca0: 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 33 32  l abstract Int32
1cb0: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
1cc0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1cd0: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
1ce0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1cf0: 63 74 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36  ct Int64 GetInt6
1d00: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
1d10: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
1d20: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
1d30: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
1d40: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
1d50: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1d60: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
1d70: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1d80: 63 74 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  ct long GetBytes
1d90: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1da0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
1db0: 2c 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65  , int nDataoffse
1dc0: 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
1dd0: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
1de0: 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20   nLength);..    
1df0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1e00: 74 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28  t long GetChars(
1e10: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1e20: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
1e30: 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74   int nDataoffset
1e40: 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20  , char[] bDest, 
1e50: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
1e60: 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69  nLength);..    i
1e70: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1e80: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
1e90: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
1ea0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
1eb0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
1ec0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62  ernal abstract b
1ed0: 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
1ee0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
1ef0: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a   int index);....
1f00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1f10: 74 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74  tract void Creat
1f20: 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e  eCollation(strin
1f30: 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20  g strCollation, 
1f40: 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20  SQLiteCollation 
1f50: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  func, SQLiteColl
1f60: 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 3b 0d 0a  ation func16);..
1f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1f80: 74 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74  tract void Creat
1f90: 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
1fa0: 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
1fb0: 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
1fc0: 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
1fd0: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
1fe0: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
1ff0: 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
2000: 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
2010: 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 69 6e  cfinal);..    in
2020: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2030: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
2040: 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65  e GetCollationSe
2050: 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e  quence(SQLiteFun
2060: 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50  ction func, IntP
2070: 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  tr context);..  
2080: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2090: 61 63 74 20 69 6e 74 20 43 6f 6e 74 65 78 74 43  act int ContextC
20a0: 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f  ollateCompare(Co
20b0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
20c0: 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20  num enc, IntPtr 
20d0: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
20e0: 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 3b 0d  s1, string s2);.
20f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2100: 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6e 74 65  stract int Conte
2110: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
2120: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
2130: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
2140: 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72  tr context, char
2150: 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
2160: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
2170: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
2180: 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
2190: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d  ntPtr context);.
21a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
21b0: 73 74 72 61 63 74 20 49 6e 74 50 74 72 20 41 67  stract IntPtr Ag
21c0: 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49  gregateContext(I
21d0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d  ntPtr context);.
21e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
21f0: 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65  abstract long Ge
2200: 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73  tParamValueBytes
2210: 28 49 6e 74 50 74 72 20 70 74 72 2c 20 69 6e 74  (IntPtr ptr, int
2220: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
2230: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
2240: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
2250: 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  gth);..    inter
2260: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75  nal abstract dou
2270: 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ble GetParamValu
2280: 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70  eDouble(IntPtr p
2290: 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  tr);..    intern
22a0: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
22b0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
22c0: 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d  32(IntPtr ptr);.
22d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
22e0: 73 74 72 61 63 74 20 49 6e 74 36 34 20 47 65 74  stract Int64 Get
22f0: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
2300: 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20  IntPtr ptr);..  
2310: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2320: 61 63 74 20 73 74 72 69 6e 67 20 47 65 74 50 61  act string GetPa
2330: 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
2340: 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69  Ptr ptr);..    i
2350: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2360: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
2370: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
2380: 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 0d 0a  IntPtr ptr);....
2390: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
23a0: 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72  tract void Retur
23b0: 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e  nBlob(IntPtr con
23c0: 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c  text, byte[] val
23d0: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
23e0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
23f0: 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e   ReturnDouble(In
2400: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f  tPtr context, do
2410: 75 62 6c 65 20 76 61 6c 75 65 29 3b 0d 0a 20 20  uble value);..  
2420: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2430: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 45  act void ReturnE
2440: 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
2450: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
2460: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2470: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2480: 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50  ReturnInt32(IntP
2490: 74 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 33  tr context, Int3
24a0: 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  2 value);..    i
24b0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
24c0: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
24d0: 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
24e0: 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d  , Int64 value);.
24f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2500: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
2510: 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f  rnNull(IntPtr co
2520: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74  ntext);..    int
2530: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2540: 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49  oid ReturnText(I
2550: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
2560: 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 0d  tring value);...
2570: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2580: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
2590: 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
25a0: 65 78 74 65 6e 65 64 20 72 65 73 75 6c 74 20 63  extened result c
25b0: 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79  odes returned by
25c0: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f   SQLite..    ///
25d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
25e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
25f0: 3d 22 62 4f 6e 4f 66 66 22 3e 74 72 75 65 20 74  ="bOnOff">true t
2600: 6f 20 65 6e 61 62 6c 65 20 65 78 74 65 6e 64 65  o enable extende
2610: 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 2c 20  d result codes, 
2620: 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
2630: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
2640: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
2650: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
2660: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
2670: 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
2680: 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
2690: 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f  OnOff);..    ///
26a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
26b0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
26c0: 6e 75 6d 65 72 69 63 20 72 65 73 75 6c 74 20 63  numeric result c
26d0: 6f 64 65 20 66 6f 72 20 74 68 65 20 6d 6f 73 74  ode for the most
26e0: 20 72 65 63 65 6e 74 20 66 61 69 6c 65 64 20 53   recent failed S
26f0: 51 4c 69 74 65 20 41 50 49 20 63 61 6c 6c 20 0d  QLite API call .
2700: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
2710: 74 65 64 20 77 69 74 68 20 74 68 65 20 64 61 74  ted with the dat
2720: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2730: 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  . ..    /// </su
2740: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2750: 3c 72 65 74 75 72 6e 73 3e 52 65 73 75 6c 74 20  <returns>Result 
2760: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
2770: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2780: 74 72 61 63 74 20 69 6e 74 20 52 65 73 75 6c 74  tract int Result
2790: 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f  Code();..    ///
27a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27b0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
27c0: 65 78 74 65 6e 64 65 64 20 6e 75 6d 65 72 69 63  extended numeric
27d0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72   result code for
27e0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
27f0: 20 66 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41   failed SQLite A
2800: 50 49 20 63 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f  PI call ..    //
2810: 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
2820: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  h the database c
2830: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 0d 0a 20 20 20  onnection. ..   
2840: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2850: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2860: 73 3e 45 78 74 65 6e 64 65 64 20 72 65 73 75 6c  s>Extended resul
2870: 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
2880: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2890: 62 73 74 72 61 63 74 20 69 6e 74 20 45 78 74 65  bstract int Exte
28a0: 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29  ndedResultCode()
28b0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
28c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
28d0: 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
28e0: 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
28f0: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
2900: 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erface...    ///
2910: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2920: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2930: 3d 22 69 45 72 72 43 6f 64 65 22 3e 45 72 72 6f  ="iErrCode">Erro
2940: 72 20 63 6f 64 65 20 74 6f 20 62 65 20 6c 6f 67  r code to be log
2950: 67 65 64 20 77 69 74 68 20 74 68 65 20 6d 65 73  ged with the mes
2960: 73 61 67 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  sage.</param>.. 
2970: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2980: 6d 65 3d 22 7a 4d 65 73 73 61 67 65 22 3e 53 74  me="zMessage">St
2990: 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67 65  ring to be logge
29a0: 64 2e 20 20 55 6e 6c 69 6b 65 20 74 68 65 20 53  d.  Unlike the S
29b0: 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
29c0: 67 28 29 20 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  g() ..    /// in
29d0: 74 65 72 66 61 63 65 2c 20 74 68 69 73 20 73 68  terface, this sh
29e0: 6f 75 6c 64 20 62 65 20 70 72 65 2d 66 6f 72 6d  ould be pre-form
29f0: 61 74 74 65 64 2e 20 20 43 6f 6e 73 69 64 65 72  atted.  Consider
2a00: 20 75 73 69 6e 67 20 74 68 65 20 0d 0a 20 20 20   using the ..   
2a10: 20 2f 2f 2f 20 53 74 72 69 6e 67 2e 46 6f 72 6d   /// String.Form
2a20: 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  at() function.</
2a30: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2a40: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
2a50: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
2a60: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2a70: 4c 6f 67 4d 65 73 73 61 67 65 28 69 6e 74 20 69  LogMessage(int i
2a80: 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20  ErrCode, string 
2a90: 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20  zMessage);....  
2aa0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2ab0: 61 63 74 20 76 6f 69 64 20 53 65 74 50 61 73 73  act void SetPass
2ac0: 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
2ad0: 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a 20 20 20  wordBytes);..   
2ae0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2af0: 63 74 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  ct void ChangePa
2b00: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
2b10: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 3b  wPasswordBytes);
2b20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2b30: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53   abstract void S
2b40: 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
2b50: 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
2b60: 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e  k func);..    in
2b70: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2b80: 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f  void SetCommitHo
2b90: 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43  ok(SQLiteCommitC
2ba0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a  allback func);..
2bb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2bc0: 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 54 72  tract void SetTr
2bd0: 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
2be0: 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
2bf0: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65  func);..    inte
2c00: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
2c10: 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f  id SetRollbackHo
2c20: 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63  ok(SQLiteRollbac
2c30: 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b  kCallback func);
2c40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2c50: 62 73 74 72 61 63 74 20 69 6e 74 20 53 65 74 4c  bstract int SetL
2c60: 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ogCallback(SQLit
2c70: 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e  eLogCallback fun
2c80: 63 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  c);....    inter
2c90: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
2ca0: 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62   GetCursorForTab
2cb0: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
2cc0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 61 74  nt stmt, int dat
2cd0: 61 62 61 73 65 2c 20 69 6e 74 20 72 6f 6f 74 50  abase, int rootP
2ce0: 61 67 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  age);..    inter
2cf0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e  nal abstract lon
2d00: 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72  g GetRowIdForCur
2d10: 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d  sor(SQLiteStatem
2d20: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75  ent stmt, int cu
2d30: 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e  rsor);....    in
2d40: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2d50: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
2d60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2d70: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
2d80: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29   SQLiteType typ)
2d90: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
2da0: 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20  l abstract bool 
2db0: 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20  AutoCommit..    
2dc0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 3b 0d 0a 20  {..      get;.. 
2dd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2de0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
2df0: 74 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74  t FileControl(st
2e00: 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e  ring zDbName, in
2e10: 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72  t op, IntPtr pAr
2e20: 67 29 3b 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65  g);....    prote
2e30: 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69  cted virtual voi
2e40: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 62  d Dispose(bool b
2e50: 44 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  Disposing)..    
2e60: 7b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  {..    }....    
2e70: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
2e80: 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ose()..    {..  
2e90: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
2ea0: 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 53 75 70  );..      GC.Sup
2eb0: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
2ec0: 69 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  is);..    }.... 
2ed0: 20 20 20 2f 2f 20 54 68 65 73 65 20 73 74 61 74     // These stat
2ee0: 69 63 73 20 61 72 65 20 68 65 72 65 20 66 6f 72  ics are here for
2ef0: 20 6c 61 63 6b 20 6f 66 20 61 20 62 65 74 74 65   lack of a bette
2f00: 72 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20 74  r place to put t
2f10: 68 65 6d 2e 0d 0a 20 20 20 20 2f 2f 20 54 68 65  hem...    // The
2f20: 79 20 65 78 69 73 74 20 68 65 72 65 20 62 65 63  y exist here bec
2f30: 61 75 73 65 20 74 68 65 79 20 61 72 65 20 63 61  ause they are ca
2f40: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 20  lled during the 
2f50: 66 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0d  finalization of.
2f60: 0a 20 20 20 20 2f 2f 20 61 20 53 51 4c 69 74 65  .    // a SQLite
2f70: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  StatementHandle,
2f80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2f90: 6e 48 61 6e 64 6c 65 2c 20 61 6e 64 20 53 51 4c  nHandle, and SQL
2fa0: 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69  iteFunctionCooki
2fb0: 65 48 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 2f 2f  eHandle...    //
2fc0: 20 54 68 65 72 65 66 6f 72 65 20 74 68 65 73 65   Therefore these
2fd0: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
2fe0: 74 6f 20 62 65 20 73 74 61 74 69 63 2c 20 61 6e  to be static, an
2ff0: 64 20 68 61 76 65 20 74 6f 20 62 65 20 6c 6f 77  d have to be low
3000: 2d 6c 65 76 65 6c 2e 0d 0a 0d 0a 20 20 20 20 69  -level.....    i
3010: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
3020: 74 72 69 6e 67 20 53 51 4c 69 74 65 4c 61 73 74  tring SQLiteLast
3030: 45 72 72 6f 72 28 53 51 4c 69 74 65 43 6f 6e 6e  Error(SQLiteConn
3040: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 62 29  ectionHandle db)
3050: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
3060: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3070: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
3080: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3090: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
30a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
30b0: 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65  ite3_errmsg_inte
30c0: 72 6f 70 28 64 62 2c 20 6f 75 74 20 6c 65 6e 29  rop(db, out len)
30d0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
30e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
30f0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
3100: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3110: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
3120: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
3130: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3140: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
3150: 64 20 46 69 6e 61 6c 69 7a 65 53 74 61 74 65 6d  d FinalizeStatem
3160: 65 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ent(SQLiteStatem
3170: 65 6e 74 48 61 6e 64 6c 65 20 73 74 6d 74 29 0d  entHandle stmt).
3180: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
3190: 63 6b 20 28 5f 6c 6f 63 6b 29 0d 0a 20 20 20 20  ck (_lock)..    
31a0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
31b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
31c0: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
31d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
31e0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f  qlite3_finalize_
31f0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a  interop(stmt);..
3200: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 6e 74  #else..      int
3210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
3220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3230: 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b  _finalize(stmt);
3240: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3250: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
3260: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
3270: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
3280: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3290: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
32a0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 43 6c 6f   static void Clo
32b0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 53 51 4c  seConnection(SQL
32c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
32d0: 64 6c 65 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a  dle db)..    {..
32e0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 6c 6f 63        lock (_loc
32f0: 6b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  k)..      {..#if
3300: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3310: 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  D..        int n
3320: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3330: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3340: 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 64 62 29  lose_interop(db)
3350: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
3360: 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  ResetConnection(
3370: 64 62 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  db);..      int 
3380: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
3390: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
33a0: 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 23 65 6e 64  close(db);..#end
33b0: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
33c0: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
33d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
33e0: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
33f0: 72 6f 72 28 64 62 29 29 3b 0d 0a 20 20 20 20 20  ror(db));..     
3400: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3410: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
3420: 20 76 6f 69 64 20 52 65 73 65 74 43 6f 6e 6e 65   void ResetConne
3430: 63 74 69 6f 6e 28 53 51 4c 69 74 65 43 6f 6e 6e  ction(SQLiteConn
3440: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 62 29  ectionHandle db)
3450: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c  ..    {..      l
3460: 6f 63 6b 20 28 5f 6c 6f 63 6b 29 0d 0a 20 20 20  ock (_lock)..   
3470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
3480: 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50  tPtr stmt = IntP
3490: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
34a0: 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20    int n;..      
34b0: 20 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 7b 0d    do..        {.
34c0: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20  .          stmt 
34d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
34e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6e 65  thods.sqlite3_ne
34f0: 78 74 5f 73 74 6d 74 28 64 62 2c 20 73 74 6d 74  xt_stmt(db, stmt
3500: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
3510: 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72   (stmt != IntPtr
3520: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
3530: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
3540: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
3550: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
3560: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3570: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
3580: 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23 65 6c  erop(stmt);..#el
3590: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
35a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
35b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
35c0: 72 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 23 65  reset(stmt);..#e
35d0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
35e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69  }..        } whi
35f0: 6c 65 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  le (stmt != IntP
3600: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20  tr.Zero);....   
3610: 20 20 20 20 20 69 66 20 28 49 73 41 75 74 6f 63       if (IsAutoc
3620: 6f 6d 6d 69 74 28 64 62 29 20 3d 3d 20 66 61 6c  ommit(db) == fal
3630: 73 65 29 20 2f 2f 20 61 20 74 72 61 6e 73 61 63  se) // a transac
3640: 74 69 6f 6e 20 69 73 20 70 65 6e 64 69 6e 67 20  tion is pending 
3650: 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  on the connectio
3660: 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
3670: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
3680: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3690: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
36a0: 20 54 6f 55 54 46 38 28 22 52 4f 4c 4c 42 41 43   ToUTF8("ROLLBAC
36b0: 4b 22 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  K"), IntPtr.Zero
36c0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6f  , IntPtr.Zero, o
36d0: 75 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  ut stmt);..     
36e0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
36f0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3700: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
3710: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 64 62 29  iteLastError(db)
3720: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
3730: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3740: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
3750: 61 74 69 63 20 62 6f 6f 6c 20 49 73 41 75 74 6f  atic bool IsAuto
3760: 63 6f 6d 6d 69 74 28 53 51 4c 69 74 65 43 6f 6e  commit(SQLiteCon
3770: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64  nectionHandle hd
3780: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
3790: 20 72 65 74 75 72 6e 20 28 55 6e 73 61 66 65 4e   return (UnsafeN
37a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
37b0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
37c0: 6d 69 74 28 68 64 6c 29 20 3d 3d 20 31 29 3b 0d  mit(hdl) == 1);.
37d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 7d 0d 0a 0d  .    }....  }...
37e0: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 65  .  internal inte
37f0: 72 66 61 63 65 20 49 53 51 4c 69 74 65 53 63 68  rface ISQLiteSch
3800: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 0d 0a 20  emaExtensions.. 
3810: 20 7b 0d 0a 20 20 20 20 76 6f 69 64 20 42 75 69   {..    void Bui
3820: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 53 51 4c  ldTempSchema(SQL
3830: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
3840: 6e 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 5b 46  n);..  }....  [F
3850: 6c 61 67 73 5d 0d 0a 20 20 69 6e 74 65 72 6e 61  lags]..  interna
3860: 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 4f 70 65  l enum SQLiteOpe
3870: 6e 46 6c 61 67 73 45 6e 75 6d 0d 0a 20 20 7b 0d  nFlagsEnum..  {.
3880: 0a 20 20 20 20 4e 6f 6e 65 20 3d 20 30 2c 0d 0a  .    None = 0,..
3890: 20 20 20 20 52 65 61 64 4f 6e 6c 79 20 3d 20 30      ReadOnly = 0
38a0: 78 30 31 2c 0d 0a 20 20 20 20 52 65 61 64 57 72  x01,..    ReadWr
38b0: 69 74 65 20 3d 20 30 78 30 32 2c 0d 0a 20 20 20  ite = 0x02,..   
38c0: 20 43 72 65 61 74 65 20 3d 20 30 78 30 34 2c 0d   Create = 0x04,.
38d0: 0a 20 20 20 20 53 68 61 72 65 64 43 61 63 68 65  .    SharedCache
38e0: 20 3d 20 30 78 30 31 30 30 30 30 30 30 2c 0d 0a   = 0x01000000,..
38f0: 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 30 78      Default = 0x
3900: 30 36 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f  06,..  }....  //
3910: 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 6f   These are the o
3920: 70 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 69 6e  ptions to the in
3930: 74 65 72 6e 61 6c 20 73 71 6c 69 74 65 33 5f 63  ternal sqlite3_c
3940: 6f 6e 66 69 67 20 63 61 6c 6c 2e 0d 0a 20 20 69  onfig call...  i
3950: 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c  nternal enum SQL
3960: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
3970: 0d 0a 20 20 7b 0d 0a 20 20 20 20 53 51 4c 49 54  ..  {..    SQLIT
3980: 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45 54  E_CONFIG_SINGLET
3990: 48 52 45 41 44 20 3d 20 31 2c 20 2f 2f 20 6e 69  HREAD = 1, // ni
39a0: 6c 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  l ..    SQLITE_C
39b0: 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41  ONFIG_MULTITHREA
39c0: 44 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 20 0d 0a  D = 2, // nil ..
39d0: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
39e0: 47 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d 20 33  G_SERIALIZED = 3
39f0: 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53  , // nil ..    S
3a00: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c  QLITE_CONFIG_MAL
3a10: 4c 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71 6c 69  LOC = 4, // sqli
3a20: 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a  te3_mem_methods*
3a30: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
3a40: 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20 3d  NFIG_GETMALLOC =
3a50: 20 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d   5, // sqlite3_m
3a60: 65 6d 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20  em_methods* ..  
3a70: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
3a80: 53 43 52 41 54 43 48 20 3d 20 36 2c 20 2f 2f 20  SCRATCH = 6, // 
3a90: 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a 2c 20 69  void*, int sz, i
3aa0: 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51 4c 49 54  nt N ..    SQLIT
3ab0: 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43  E_CONFIG_PAGECAC
3ac0: 48 45 20 3d 20 37 2c 20 2f 2f 20 76 6f 69 64 2a  HE = 7, // void*
3ad0: 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 20  , int sz, int N 
3ae0: 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
3af0: 46 49 47 5f 48 45 41 50 20 3d 20 38 2c 20 2f 2f  FIG_HEAP = 8, //
3b00: 20 76 6f 69 64 2a 2c 20 69 6e 74 20 6e 42 79 74   void*, int nByt
3b10: 65 2c 20 69 6e 74 20 6d 69 6e 20 0d 0a 20 20 20  e, int min ..   
3b20: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
3b30: 45 4d 53 54 41 54 55 53 20 3d 20 39 2c 20 2f 2f  EMSTATUS = 9, //
3b40: 20 62 6f 6f 6c 65 61 6e 20 0d 0a 20 20 20 20 53   boolean ..    S
3b50: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55 54  QLITE_CONFIG_MUT
3b60: 45 58 20 3d 20 31 30 2c 20 2f 2f 20 73 71 6c 69  EX = 10, // sqli
3b70: 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
3b80: 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  s* ..    SQLITE_
3b90: 43 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45 58 20  CONFIG_GETMUTEX 
3ba0: 3d 20 31 31 2c 20 2f 2f 20 73 71 6c 69 74 65 33  = 11, // sqlite3
3bb0: 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 2a 20  _mutex_methods* 
3bc0: 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69 6f 75  ..    // previou
3bd0: 73 6c 79 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  sly SQLITE_CONFI
3be0: 47 5f 43 48 55 4e 4b 41 4c 4c 4f 43 20 31 32 20  G_CHUNKALLOC 12 
3bf0: 77 68 69 63 68 20 69 73 20 6e 6f 77 20 75 6e 75  which is now unu
3c00: 73 65 64 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  sed..    SQLITE_
3c10: 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45  CONFIG_LOOKASIDE
3c20: 20 3d 20 31 33 2c 20 2f 2f 20 69 6e 74 20 69 6e   = 13, // int in
3c30: 74 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  t ..    SQLITE_C
3c40: 4f 4e 46 49 47 5f 50 43 41 43 48 45 20 3d 20 31  ONFIG_PCACHE = 1
3c50: 34 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63  4, // sqlite3_pc
3c60: 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a  ache_methods* ..
3c70: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
3c80: 47 5f 47 45 54 50 43 41 43 48 45 20 3d 20 31 35  G_GETPCACHE = 15
3c90: 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63 61  , // sqlite3_pca
3ca0: 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20  che_methods* .. 
3cb0: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
3cc0: 5f 4c 4f 47 20 3d 20 31 36 2c 20 2f 2f 20 78 46  _LOG = 16, // xF
3cd0: 75 6e 63 2c 20 76 6f 69 64 2a 20 0d 0a 20 20 7d  unc, void* ..  }
3ce0: 0d 0a 0d 0a 7d 0d 0a                             ....}..