System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9b8da40a4ce5df092225c83b2a31f1ab782dc143:


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 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
0300: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
0310: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
0320: 69 6e 64 29 20 7b 20 7d 0d 0a 0d 0a 20 20 20 20  ind) { }....    
0330: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0340: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61     /// Returns a
0350: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
0360: 74 69 6e 67 20 74 68 65 20 61 63 74 69 76 65 20  ting the active 
0370: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
0380: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
0390: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
03a0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
03b0: 69 6e 67 20 56 65 72 73 69 6f 6e 20 7b 20 67 65  ing Version { ge
03c0: 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  t; }..    /// <s
03d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
03e0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 72 6f 77   Returns the row
03f0: 69 64 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  id of the most r
0400: 65 63 65 6e 74 20 73 75 63 63 65 73 73 66 75 6c  ecent successful
0410: 20 49 4e 53 45 52 54 20 69 6e 74 6f 20 74 68 65   INSERT into the
0420: 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 74   database from t
0430: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  his connection..
0440: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0450: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
0460: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
0470: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 20  LastInsertRowId 
0480: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
0490: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
04a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
04b0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
04c0: 65 73 20 74 68 65 20 6c 61 73 74 20 65 78 65 63  es the last exec
04d0: 75 74 69 6e 67 20 69 6e 73 65 72 74 2f 75 70 64  uting insert/upd
04e0: 61 74 65 20 63 61 75 73 65 64 2e 0d 0a 20 20 20  ate caused...   
04f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0500: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0510: 73 74 72 61 63 74 20 69 6e 74 20 43 68 61 6e 67  stract int Chang
0520: 65 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  es { get; }..   
0530: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0540: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
0550: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
0560: 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20  mory (in bytes) 
0570: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
0580: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63   by the SQLite c
0590: 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68  ore library.  Th
05a0: 69 73 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  is is not really
05b0: 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f   a per-connectio
05c0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65  n..    /// value
05d0: 2c 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  , it is global t
05e0: 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a  o the process...
05f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0600: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0610: 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 4d   abstract long M
0620: 65 6d 6f 72 79 55 73 65 64 20 7b 20 67 65 74 3b  emoryUsed { get;
0630: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
0640: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
0650: 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
0660: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d  um amount of mem
0670: 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20 75  ory (in bytes) u
0680: 73 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  sed by the SQLit
0690: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 73  e core library s
06a0: 69 6e 63 65 20 74 68 65 20 68 69 67 68 2d 77 61  ince the high-wa
06b0: 74 65 72 20 6d 61 72 6b 20 77 61 73 20 6c 61 73  ter mark was las
06c0: 74 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f  t reset...    //
06d0: 2f 20 54 68 69 73 20 69 73 20 6e 6f 74 20 72 65  / This is not re
06e0: 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65  ally a per-conne
06f0: 63 74 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74 20  ction value, it 
0700: 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
0710: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
0720: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0730: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
0740: 72 61 63 74 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ract long Memory
0750: 48 69 67 68 77 61 74 65 72 20 7b 20 67 65 74 3b  Highwater { get;
0760: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
0770: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
0780: 65 74 73 20 74 68 65 20 73 74 61 74 75 73 20 6f  ets the status o
0790: 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 75 73 61  f the memory usa
07a0: 67 65 20 74 72 61 63 6b 69 6e 67 20 73 75 62 73  ge tracking subs
07b0: 79 73 74 65 6d 20 69 6e 20 74 68 65 20 53 51 4c  ystem in the SQL
07c0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
07d0: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
07e0: 68 69 73 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d  his is enabled..
07f0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 69 73  .    /// If this
0800: 20 69 73 20 64 69 73 61 62 6c 65 64 2c 20 6d 65   is disabled, me
0810: 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b  mory usage track
0820: 69 6e 67 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ing will not be 
0830: 70 65 72 66 6f 72 6d 65 64 2e 20 20 54 68 69 73  performed.  This
0840: 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61   is not really a
0850: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
0860: 76 61 6c 75 65 2c 20 69 74 20 69 73 0d 0a 20 20  value, it is..  
0870: 20 20 2f 2f 2f 20 67 6c 6f 62 61 6c 20 74 6f 20    /// global to 
0880: 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  the process...  
0890: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
08a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
08b0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 4e 6f   name="value">No
08c0: 6e 2d 7a 65 72 6f 20 74 6f 20 65 6e 61 62 6c 65  n-zero to enable
08d0: 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74 72   memory usage tr
08e0: 61 63 6b 69 6e 67 2c 20 7a 65 72 6f 20 6f 74 68  acking, zero oth
08f0: 65 72 77 69 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  erwise.</param>.
0900: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0910: 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s>A standard SQL
0920: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
0930: 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73  (i.e. zero for s
0940: 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a  uccess and non-z
0950: 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  ero for failure)
0960: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
0970: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
0980: 63 74 20 69 6e 74 20 53 65 74 4d 65 6d 6f 72 79  ct int SetMemory
0990: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
09a0: 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  e);..    /// <su
09b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
09c0: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
09d0: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
09e0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
09f0: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
0a00: 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74  erent config opt
0a10: 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57  ions...    /// W
0a20: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
0a30: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
0a40: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
0a50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0a60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0a70: 73 74 72 61 63 74 20 69 6e 74 20 53 68 75 74 64  stract int Shutd
0a80: 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  own();..    /// 
0a90: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0aa0: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
0ab0: 65 72 6f 20 69 66 20 61 20 64 61 74 61 62 61 73  ero if a databas
0ac0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
0ad0: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
0ae0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
0af0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
0b00: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
0b10: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f  rnal abstract bo
0b20: 6f 6c 20 49 73 4f 70 65 6e 28 29 3b 0d 0a 20 20  ol IsOpen();..  
0b30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0b40: 0a 20 20 20 20 2f 2f 2f 20 4f 70 65 6e 73 20 61  .    /// Opens a
0b50: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
0b60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0b70: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
0b80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6d 70 6c 65  >..    /// Imple
0b90: 6d 65 6e 74 65 72 73 20 73 68 6f 75 6c 64 20 63  menters should c
0ba0: 61 6c 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69  all SQLiteFuncti
0bb0: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
0bc0: 28 29 20 61 6e 64 20 73 61 76 65 20 74 68 65 20  () and save the 
0bd0: 61 72 72 61 79 20 61 66 74 65 72 20 6f 70 65 6e  array after open
0be0: 69 6e 67 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  ing a connection
0bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 62 69 6e  ..    /// to bin
0c00: 64 20 61 6c 6c 20 61 74 74 72 69 62 75 74 65 64  d all attributed
0c10: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
0c20: 6e 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c  nctions and coll
0c30: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
0c40: 74 6f 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65  to the new conne
0c50: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0c60: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
0c70: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0c80: 22 73 74 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68  "strFilename">Th
0c90: 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68  e filename of th
0ca0: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70  e database to op
0cb0: 65 6e 2e 20 20 53 51 4c 69 74 65 20 61 75 74 6f  en.  SQLite auto
0cc0: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
0cd0: 73 20 69 74 20 69 66 20 69 74 20 64 6f 65 73 6e  s it if it doesn
0ce0: 27 74 20 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d  't exist.</param
0cf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d00: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69  m name="connecti
0d10: 6f 6e 46 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  onFlags">The fla
0d20: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
0d30: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
0d40: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 3c  nnection object<
0d50: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0d60: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70   <param name="op
0d70: 65 6e 46 6c 61 67 73 22 3e 54 68 65 20 6f 70 65  enFlags">The ope
0d80: 6e 20 66 6c 61 67 73 20 74 6f 20 75 73 65 20 77  n flags to use w
0d90: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65  hen creating the
0da0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 70 61 72   connection</par
0db0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0dc0: 72 61 6d 20 6e 61 6d 65 3d 22 6d 61 78 50 6f 6f  ram name="maxPoo
0dd0: 6c 53 69 7a 65 22 3e 54 68 65 20 6d 61 78 69 6d  lSize">The maxim
0de0: 75 6d 20 73 69 7a 65 20 6f 66 20 74 68 65 20 70  um size of the p
0df0: 6f 6f 6c 20 66 6f 72 20 74 68 65 20 67 69 76 65  ool for the give
0e00: 6e 20 66 69 6c 65 6e 61 6d 65 3c 2f 70 61 72 61  n filename</para
0e10: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0e20: 61 6d 20 6e 61 6d 65 3d 22 75 73 65 50 6f 6f 6c  am name="usePool
0e30: 22 3e 49 66 20 74 72 75 65 2c 20 74 68 65 20 63  ">If true, the c
0e40: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65  onnection can be
0e50: 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
0e60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c   connection pool
0e70: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
0e80: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0e90: 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67  void Open(string
0ea0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51   strFilename, SQ
0eb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
0ec0: 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  ags connectionFl
0ed0: 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46  ags, SQLiteOpenF
0ee0: 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61  lagsEnum openFla
0ef0: 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53  gs, int maxPoolS
0f00: 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f  ize, bool usePoo
0f10: 6c 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  l);..    /// <su
0f20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0f30: 43 6c 6f 73 65 73 20 74 68 65 20 63 75 72 72 65  Closes the curre
0f40: 6e 74 6c 79 2d 6f 70 65 6e 20 64 61 74 61 62 61  ntly-open databa
0f50: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0f60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0f70: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
0f80: 2f 2f 2f 20 41 66 74 65 72 20 74 68 65 20 64 61  /// After the da
0f90: 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20  tabase has been 
0fa0: 63 6c 6f 73 65 64 20 69 6d 70 6c 65 6d 65 74 65  closed implemete
0fb0: 72 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53  rs should call S
0fc0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
0fd0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20  bindFunctions() 
0fe0: 74 6f 20 64 65 61 6c 6c 6f 63 61 74 65 20 61 6c  to deallocate al
0ff0: 6c 20 69 6e 74 65 72 6f 70 20 61 6c 6c 6f 63 61  l interop alloca
1000: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 6d  ted..    /// mem
1010: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
1020: 69 74 68 20 74 68 65 20 75 73 65 72 2d 64 65 66  ith the user-def
1030: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61  ined functions a
1040: 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
1050: 75 65 6e 63 65 73 20 74 69 65 64 20 74 6f 20 74  uences tied to t
1060: 68 65 20 63 6c 6f 73 65 64 20 63 6f 6e 6e 65 63  he closed connec
1070: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
1080: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 69  /remarks>..    i
1090: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
10a0: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 3b 0d 0a   void Close();..
10b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 73 20  >..    /// Sets 
10d0: 74 68 65 20 62 75 73 79 20 74 69 6d 65 6f 75 74  the busy timeout
10e0: 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   on the connecti
10f0: 6f 6e 2e 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61  on.  SQLiteComma
1100: 6e 64 20 77 69 6c 6c 20 63 61 6c 6c 20 74 68 69  nd will call thi
1110: 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
1120: 6e 67 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 2e 0d  ng any command..
1130: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1140: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1150: 72 61 6d 20 6e 61 6d 65 3d 22 6e 54 69 6d 65 6f  ram name="nTimeo
1160: 75 74 4d 53 22 3e 54 68 65 20 6e 75 6d 62 65 72  utMS">The number
1170: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
1180: 20 74 6f 20 77 61 69 74 20 62 65 66 6f 72 65 20   to wait before 
1190: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
11a0: 5f 42 55 53 59 3c 2f 70 61 72 61 6d 3e 0d 0a 20  _BUSY</param>.. 
11b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
11c0: 72 61 63 74 20 76 6f 69 64 20 53 65 74 54 69 6d  ract void SetTim
11d0: 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75  eout(int nTimeou
11e0: 74 4d 53 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tMS);..    /// <
11f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1200: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 65  / Returns the te
1210: 78 74 20 6f 66 20 74 68 65 20 6c 61 73 74 20 65  xt of the last e
1220: 72 72 6f 72 20 69 73 73 75 65 64 20 62 79 20 53  rror issued by S
1230: 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  QLite..    /// <
1240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1250: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
1260: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1270: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1280: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
1290: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  r();....    /// 
12a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
12b0: 2f 2f 20 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20  // When pooling 
12c0: 69 73 20 65 6e 61 62 6c 65 64 2c 20 66 6f 72 63  is enabled, forc
12d0: 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  e this connectio
12e0: 6e 20 74 6f 20 62 65 20 64 69 73 70 6f 73 65 64  n to be disposed
12f0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 74   rather than ret
1300: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 70 6f 6f  urned to the poo
1310: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  l..    /// </sum
1320: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
1330: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1340: 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a  d ClearPool();..
1350: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1360: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65  ry>..    /// Whe
1370: 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20 65 6e 61  n pooling is ena
1380: 62 6c 65 64 2c 20 72 65 74 75 72 6e 73 20 74 68  bled, returns th
1390: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c  e number of pool
13a0: 20 65 6e 74 72 69 65 73 20 6d 61 74 63 68 69 6e   entries matchin
13b0: 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69  g the current fi
13c0: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  le name...    //
13d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13e0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
13f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f  he number of poo
1400: 6c 20 65 6e 74 72 69 65 73 20 6d 61 74 63 68 69  l entries matchi
1410: 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  ng the current f
1420: 69 6c 65 20 6e 61 6d 65 2e 3c 2f 72 65 74 75 72  ile name.</retur
1430: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1440: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 43  l abstract int C
1450: 6f 75 6e 74 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20  ountPool();.... 
1460: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1470: 0d 0a 20 20 20 20 2f 2f 2f 20 50 72 65 70 61 72  ..    /// Prepar
1480: 65 73 20 61 20 53 51 4c 20 73 74 61 74 65 6d 65  es a SQL stateme
1490: 6e 74 20 66 6f 72 20 65 78 65 63 75 74 69 6f 6e  nt for execution
14a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22  param name="cnn"
14d0: 3e 54 68 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e  >The source conn
14e0: 65 63 74 69 6f 6e 20 70 72 65 70 61 72 69 6e 67  ection preparing
14f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43   the command.  C
1500: 61 6e 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61  an be null for a
1510: 6e 79 20 63 61 6c 6c 65 72 20 65 78 63 65 70 74  ny caller except
1520: 20 4c 49 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20   LINQ</param>.. 
1530: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1540: 6d 65 3d 22 73 74 72 53 71 6c 22 3e 54 68 65 20  me="strSql">The 
1550: 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74  SQL command text
1560: 20 74 6f 20 70 72 65 70 61 72 65 3c 2f 70 61 72   to prepare</par
1570: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1580: 72 61 6d 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f  ram name="previo
1590: 75 73 22 3e 54 68 65 20 70 72 65 76 69 6f 75 73  us">The previous
15a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 61 20   statement in a 
15b0: 6d 75 6c 74 69 2d 73 74 61 74 65 6d 65 6e 74 20  multi-statement 
15c0: 63 6f 6d 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c  command, or null
15d0: 20 69 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   if no previous 
15e0: 73 74 61 74 65 6d 65 6e 74 20 65 78 69 73 74 73  statement exists
15f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1600: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1610: 69 6d 65 6f 75 74 4d 53 22 3e 54 68 65 20 74 69  imeoutMS">The ti
1620: 6d 65 6f 75 74 20 74 6f 20 77 61 69 74 20 62 65  meout to wait be
1630: 66 6f 72 65 20 61 62 6f 72 74 69 6e 67 20 74 68  fore aborting th
1640: 65 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d  e prepare</param
1650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1660: 6d 20 6e 61 6d 65 3d 22 73 74 72 52 65 6d 61 69  m name="strRemai
1670: 6e 22 3e 54 68 65 20 72 65 6d 61 69 6e 64 65 72  n">The remainder
1680: 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   of the statemen
1690: 74 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20 70  t that was not p
16a0: 72 6f 63 65 73 73 65 64 2e 20 20 45 61 63 68 20  rocessed.  Each 
16b0: 63 61 6c 6c 20 74 6f 20 70 72 65 70 61 72 65 20  call to prepare 
16c0: 70 61 72 73 65 73 20 74 68 65 0d 0a 20 20 20 20  parses the..    
16d0: 2f 2f 2f 20 53 51 4c 20 75 70 20 74 6f 20 74 6f  /// SQL up to to
16e0: 20 65 69 74 68 65 72 20 74 68 65 20 65 6e 64 20   either the end 
16f0: 6f 66 20 74 68 65 20 74 65 78 74 20 6f 72 20 74  of the text or t
1700: 6f 20 74 68 65 20 66 69 72 73 74 20 73 65 6d 69  o the first semi
1710: 2d 63 6f 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72  -colon delimiter
1720: 2e 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67  .  The remaining
1730: 20 74 65 78 74 20 69 73 20 72 65 74 75 72 6e 65   text is returne
1740: 64 0d 0a 20 20 20 20 2f 2f 2f 20 68 65 72 65 20  d..    /// here 
1750: 66 6f 72 20 61 20 73 75 62 73 65 71 75 65 6e 74  for a subsequent
1760: 20 63 61 6c 6c 20 74 6f 20 50 72 65 70 61 72 65   call to Prepare
1770: 28 29 20 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65  () until all the
1780: 20 74 65 78 74 20 68 61 73 20 62 65 65 6e 20 70   text has been p
1790: 72 6f 63 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d  rocessed.</param
17a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
17b0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 6e 20 69  rns>Returns an i
17c0: 6e 69 74 69 61 6c 69 7a 65 64 20 53 51 4c 69 74  nitialized SQLit
17d0: 65 53 74 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74  eStatement.</ret
17e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
17f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c  nal abstract SQL
1800: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65  iteStatement Pre
1810: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  pare(SQLiteConne
1820: 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e  ction cnn, strin
1830: 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65  g strSql, SQLite
1840: 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f  Statement previo
1850: 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74  us, uint timeout
1860: 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73  MS, out string s
1870: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
1880: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1890: 20 20 20 2f 2f 2f 20 53 74 65 70 73 20 74 68 72     /// Steps thr
18a0: 6f 75 67 68 20 61 20 70 72 65 70 61 72 65 64 20  ough a prepared 
18b0: 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
18c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
18d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
18e0: 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 53  ame="stmt">The S
18f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74  QLiteStatement t
1900: 6f 20 73 74 65 70 20 74 68 72 6f 75 67 68 3c 2f  o step through</
1910: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1920: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
1930: 20 61 20 72 6f 77 20 77 61 73 20 72 65 74 75 72   a row was retur
1940: 6e 65 64 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f  ned, False if no
1950: 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
1960: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1970: 61 63 74 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  act bool Step(SQ
1980: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1990: 6d 74 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  mt);..    /// <s
19a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
19b0: 20 52 65 73 65 74 73 20 61 20 70 72 65 70 61 72   Resets a prepar
19c0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 73 6f 20  ed statement so 
19d0: 69 74 20 63 61 6e 20 62 65 20 65 78 65 63 75 74  it can be execut
19e0: 65 64 20 61 67 61 69 6e 2e 20 20 49 66 20 74 68  ed again.  If th
19f0: 65 20 65 72 72 6f 72 20 72 65 74 75 72 6e 65 64  e error returned
1a00: 20 69 73 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   is SQLITE_SCHEM
1a10: 41 2c 20 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61  A, ..    /// tra
1a20: 6e 73 70 61 72 65 6e 74 6c 79 20 61 74 74 65 6d  nsparently attem
1a30: 70 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  pt to rebuild th
1a40: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1a50: 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72  and throw an err
1a60: 6f 72 20 69 66 20 74 68 61 74 20 77 61 73 20 6e  or if that was n
1a70: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20  ot possible...  
1a80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1aa0: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
1ab0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 72 65   statement to re
1ac0: 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  set</param>..   
1ad0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
1ae0: 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20  turns -1 if the 
1af0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 20 77  schema changed w
1b00: 68 69 6c 65 20 72 65 73 65 74 74 69 6e 67 2c 20  hile resetting, 
1b10: 30 20 69 66 20 74 68 65 20 72 65 73 65 74 20 77  0 if the reset w
1b20: 61 73 20 73 75 63 65 73 73 66 75 6c 20 6f 72 20  as sucessful or 
1b30: 36 20 28 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  6 (SQLITE_LOCKED
1b40: 29 20 69 66 20 74 68 65 20 72 65 73 65 74 20 66  ) if the reset f
1b50: 61 69 6c 65 64 20 64 75 65 20 74 6f 20 61 20 6c  ailed due to a l
1b60: 6f 63 6b 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ock</returns>.. 
1b70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1b80: 72 61 63 74 20 69 6e 74 20 52 65 73 65 74 28 53  ract int Reset(S
1b90: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1ba0: 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  tmt);..    inter
1bb0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1bc0: 64 20 43 61 6e 63 65 6c 28 29 3b 0d 0a 0d 0a 20  d Cancel();.... 
1bd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1be0: 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44  ract void Bind_D
1bf0: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
1c00: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
1c10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1c20: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
1c30: 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  ex, double value
1c40: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
1c50: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42   abstract void B
1c60: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
1c70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1c80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c90: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
1ca0: 20 69 6e 64 65 78 2c 20 49 6e 74 33 32 20 76 61   index, Int32 va
1cb0: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
1cc0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1cd0: 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51  d Bind_UInt32(SQ
1ce0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1cf0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
1d00: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
1d10: 20 69 6e 74 20 69 6e 64 65 78 2c 20 55 49 6e 74   int index, UInt
1d20: 33 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  32 value);..    
1d30: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1d40: 74 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36  t void Bind_Int6
1d50: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
1d60: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
1d70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
1d80: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
1d90: 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20  Int64 value);.. 
1da0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1db0: 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 55  ract void Bind_U
1dc0: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
1dd0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
1de0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1df0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
1e00: 65 78 2c 20 55 49 6e 74 36 34 20 76 61 6c 75 65  ex, UInt64 value
1e10: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
1e20: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42   abstract void B
1e30: 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53  ind_Text(SQLiteS
1e40: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
1e50: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
1e60: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
1e70: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
1e80: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
1e90: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1ea0: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
1eb0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1ec0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
1ed0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
1ee0: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
1ef0: 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20   blobData);..   
1f00: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1f10: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  ct void Bind_Dat
1f20: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
1f30: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
1f40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1f50: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
1f60: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
1f70: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1f80: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1f90: 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74  nd_Null(SQLiteSt
1fa0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
1fb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1fc0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
1fd0: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e  ndex);....    in
1fe0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1ff0: 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f  int Bind_ParamCo
2000: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
2010: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
2020: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
2030: 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 69 6e 74  flags);..    int
2040: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73  ernal abstract s
2050: 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d  tring Bind_Param
2060: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
2070: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
2080: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2090: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
20a0: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
20b0: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 42  l abstract int B
20c0: 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53  ind_ParamIndex(S
20d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
20e0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
20f0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
2100: 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61  , string paramNa
2110: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  me);....    inte
2120: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
2130: 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51  t ColumnCount(SQ
2140: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2150: 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  mt);..    intern
2160: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
2170: 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51  ng ColumnName(SQ
2180: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2190: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
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 54 79 70 65 41 66 66 69 6e  stract TypeAffin
21c0: 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ity ColumnAffini
21d0: 74 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ty(SQLiteStateme
21e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
21f0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
2200: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
2210: 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51  ng ColumnType(SQ
2220: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2230: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f  mt, int index, o
2240: 75 74 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  ut TypeAffinity 
2250: 6e 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20 20 20  nAffinity);..   
2260: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2270: 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64  ct int ColumnInd
2280: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
2290: 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20  nt stmt, string 
22a0: 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 20 20  columnName);..  
22b0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
22c0: 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  act string Colum
22d0: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51  nOriginalName(SQ
22e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
22f0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
2300: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2310: 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f  stract string Co
2320: 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
2330: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2340: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
2350: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2360: 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67   abstract string
2370: 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65   ColumnTableName
2380: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2390: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
23a0: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
23b0: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43   abstract void C
23c0: 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74  olumnMetaData(st
23d0: 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73  ring dataBase, s
23e0: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
23f0: 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
2400: 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c  string dataType,
2410: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
2420: 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74  ateSequence, out
2430: 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f   bool notNull, o
2440: 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b  ut bool primaryK
2450: 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74  ey, out bool aut
2460: 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 20 20  oIncrement);..  
2470: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2480: 61 63 74 20 76 6f 69 64 20 47 65 74 49 6e 64 65  act void GetInde
2490: 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49  xColumnExtendedI
24a0: 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62  nfo(string datab
24b0: 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65  ase, string inde
24c0: 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  x, string column
24d0: 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f  , out int sortMo
24e0: 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72  de, out int onEr
24f0: 72 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  ror, out string 
2500: 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
2510: 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  e);....    inter
2520: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75  nal abstract dou
2530: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51  ble GetDouble(SQ
2540: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2550: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
2560: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2570: 73 74 72 61 63 74 20 49 6e 74 33 32 20 47 65 74  stract Int32 Get
2580: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
2590: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
25a0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
25b0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49  ernal abstract I
25c0: 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28 53 51  nt64 GetInt64(SQ
25d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
25e0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
25f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2600: 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 47 65  stract string Ge
2610: 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  tText(SQLiteStat
2620: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
2630: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
2640: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c  ernal abstract l
2650: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c  ong GetBytes(SQL
2660: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2670: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
2680: 74 20 6e 44 61 74 61 6f 66 66 73 65 74 2c 20 62  t nDataoffset, b
2690: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
26a0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
26b0: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ngth);..    inte
26c0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f  rnal abstract lo
26d0: 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69  ng GetChars(SQLi
26e0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
26f0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
2700: 20 6e 44 61 74 61 6f 66 66 73 65 74 2c 20 63 68   nDataoffset, ch
2710: 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  ar[] bDest, int 
2720: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
2730: 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  gth);..    inter
2740: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 44 61 74  nal abstract Dat
2750: 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d  eTime GetDateTim
2760: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
2770: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2780: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
2790: 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20  l abstract bool 
27a0: 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  IsNull(SQLiteSta
27b0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
27c0: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
27d0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
27e0: 74 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c  t void CreateCol
27f0: 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
2800: 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
2810: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
2820: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
2830: 6e 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20  n func16);..    
2840: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2850: 74 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e  t void CreateFun
2860: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ction(string str
2870: 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41  Function, int nA
2880: 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f  rgs, bool needCo
2890: 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c  llSeq, SQLiteCal
28a0: 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69  lback func, SQLi
28b0: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73  teCallback funcs
28c0: 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c  tep, SQLiteFinal
28d0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e  Callback funcfin
28e0: 61 6c 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  al);..    intern
28f0: 61 6c 20 61 62 73 74 72 61 63 74 20 43 6f 6c 6c  al abstract Coll
2900: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
2910: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
2920: 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
2930: 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
2940: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e  ontext);..    in
2950: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2960: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
2970: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
2980: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
2990: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
29a0: 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
29b0: 73 74 72 69 6e 67 20 73 32 29 3b 0d 0a 20 20 20  string s2);..   
29c0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
29d0: 63 74 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  ct int ContextCo
29e0: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
29f0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
2a00: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
2a10: 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
2a20: 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 3b 0d 0a  1, char[] c2);..
2a30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2a40: 62 73 74 72 61 63 74 20 69 6e 74 20 41 67 67 72  bstract int Aggr
2a50: 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74  egateCount(IntPt
2a60: 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  r context);..   
2a70: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2a80: 63 74 20 49 6e 74 50 74 72 20 41 67 67 72 65 67  ct IntPtr Aggreg
2a90: 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74  ateContext(IntPt
2aa0: 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20  r context);.... 
2ab0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2ac0: 72 61 63 74 20 6c 6f 6e 67 20 47 65 74 50 61 72  ract long GetPar
2ad0: 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74  amValueBytes(Int
2ae0: 50 74 72 20 70 74 72 2c 20 69 6e 74 20 6e 44 61  Ptr ptr, int nDa
2af0: 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
2b00: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
2b10: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
2b20: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2b30: 61 62 73 74 72 61 63 74 20 64 6f 75 62 6c 65 20  abstract double 
2b40: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75  GetParamValueDou
2b50: 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 3b  ble(IntPtr ptr);
2b60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2b70: 62 73 74 72 61 63 74 20 69 6e 74 20 47 65 74 50  bstract int GetP
2b80: 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
2b90: 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20  ntPtr ptr);..   
2ba0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2bb0: 63 74 20 49 6e 74 36 34 20 47 65 74 50 61 72 61  ct Int64 GetPara
2bc0: 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50  mValueInt64(IntP
2bd0: 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e  tr ptr);..    in
2be0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2bf0: 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
2c00: 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
2c10: 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ptr);..    inter
2c20: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 54 79 70  nal abstract Typ
2c30: 65 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72  eAffinity GetPar
2c40: 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50  amValueType(IntP
2c50: 74 72 20 70 74 72 29 3b 0d 0a 0d 0a 20 20 20 20  tr ptr);....    
2c60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2c70: 74 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f  t void ReturnBlo
2c80: 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  b(IntPtr context
2c90: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 3b  , byte[] value);
2ca0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2cb0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74  bstract void Ret
2cc0: 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
2cd0: 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
2ce0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
2cf0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2d00: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
2d10: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
2d20: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d   string value);.
2d30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2d40: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
2d50: 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63  rnInt32(IntPtr c
2d60: 6f 6e 74 65 78 74 2c 20 49 6e 74 33 32 20 76 61  ontext, Int32 va
2d70: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
2d80: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
2d90: 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e  d ReturnInt64(In
2da0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e  tPtr context, In
2db0: 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t64 value);..   
2dc0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2dd0: 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75  ct void ReturnNu
2de0: 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ll(IntPtr contex
2df0: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
2e00: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2e10: 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74  ReturnText(IntPt
2e20: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
2e30: 67 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  g value);....   
2e40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2e50: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
2e60: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
2e70: 6e 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ned result codes
2e80: 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c   returned by SQL
2e90: 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ite..    /// </s
2ea0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2eb0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f   <param name="bO
2ec0: 6e 4f 66 66 22 3e 74 72 75 65 20 74 6f 20 65 6e  nOff">true to en
2ed0: 61 62 6c 65 20 65 78 74 65 6e 64 65 64 20 72 65  able extended re
2ee0: 73 75 6c 74 20 63 6f 64 65 73 2c 20 66 61 6c 73  sult codes, fals
2ef0: 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 3c 2f 70  e to disable.</p
2f00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
2f10: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
2f20: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
2f30: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53   abstract void S
2f40: 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  etExtendedResult
2f50: 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66  Codes(bool bOnOf
2f60: 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  f);..    /// <su
2f70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2f80: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 65  Returns the nume
2f90: 72 69 63 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ric result code 
2fa0: 66 6f 72 20 74 68 65 20 6d 6f 73 74 20 72 65 63  for the most rec
2fb0: 65 6e 74 20 66 61 69 6c 65 64 20 53 51 4c 69 74  ent failed SQLit
2fc0: 65 20 41 50 49 20 63 61 6c 6c 20 0d 0a 20 20 20  e API call ..   
2fd0: 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
2fe0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
2ff0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 0d 0a  e connection. ..
3000: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3010: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
3020: 75 72 6e 73 3e 52 65 73 75 6c 74 20 63 6f 64 65  urns>Result code
3030: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3040: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3050: 74 20 69 6e 74 20 52 65 73 75 6c 74 43 6f 64 65  t int ResultCode
3060: 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ();..    /// <su
3070: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3080: 52 65 74 75 72 6e 73 20 74 68 65 20 65 78 74 65  Returns the exte
3090: 6e 64 65 64 20 6e 75 6d 65 72 69 63 20 72 65 73  nded numeric res
30a0: 75 6c 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65  ult code for the
30b0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69   most recent fai
30c0: 6c 65 64 20 53 51 4c 69 74 65 20 41 50 49 20 63  led SQLite API c
30d0: 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  all ..    /// as
30e0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
30f0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3100: 63 74 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f 2f 2f  ction. ..    ///
3110: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3120: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 45 78   /// <returns>Ex
3130: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
3140: 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
3150: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
3160: 61 63 74 20 69 6e 74 20 45 78 74 65 6e 64 65 64  act int Extended
3170: 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d  ResultCode();...
3180: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3190: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20  y>..    /// Add 
31a0: 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69  a log message vi
31b0: 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  a the SQLite sql
31c0: 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61  ite3_log interfa
31d0: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ce...    /// </s
31e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
31f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 45   <param name="iE
3200: 72 72 43 6f 64 65 22 3e 45 72 72 6f 72 20 63 6f  rrCode">Error co
3210: 64 65 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 20  de to be logged 
3220: 77 69 74 68 20 74 68 65 20 6d 65 73 73 61 67 65  with the message
3230: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
3240: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3250: 7a 4d 65 73 73 61 67 65 22 3e 53 74 72 69 6e 67  zMessage">String
3260: 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 2e 20 20   to be logged.  
3270: 55 6e 6c 69 6b 65 20 74 68 65 20 53 51 4c 69 74  Unlike the SQLit
3280: 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20  e sqlite3_log() 
3290: 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66  ..    /// interf
32a0: 61 63 65 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  ace, this should
32b0: 20 62 65 20 70 72 65 2d 66 6f 72 6d 61 74 74 65   be pre-formatte
32c0: 64 2e 20 20 43 6f 6e 73 69 64 65 72 20 75 73 69  d.  Consider usi
32d0: 6e 67 20 74 68 65 20 0d 0a 20 20 20 20 2f 2f 2f  ng the ..    ///
32e0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 29   String.Format()
32f0: 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61   function.</para
3300: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
3310: 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
3320: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3330: 73 74 72 61 63 74 20 76 6f 69 64 20 4c 6f 67 4d  stract void LogM
3340: 65 73 73 61 67 65 28 69 6e 74 20 69 45 72 72 43  essage(int iErrC
3350: 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
3360: 73 61 67 65 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e  sage);....#if IN
3370: 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20  TEROP_CODEC..   
3380: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3390: 63 74 20 76 6f 69 64 20 53 65 74 50 61 73 73 77  ct void SetPassw
33a0: 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77  ord(byte[] passw
33b0: 6f 72 64 42 79 74 65 73 29 3b 0d 0a 20 20 20 20  ordBytes);..    
33c0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
33d0: 74 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73  t void ChangePas
33e0: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77  sword(byte[] new
33f0: 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 3b 0d  PasswordBytes);.
3400: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
3410: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3420: 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
3430: 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
3440: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d  Callback func);.
3450: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3460: 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 43  stract void SetC
3470: 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
3480: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
3490: 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  unc);..    inter
34a0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
34b0: 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
34c0: 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
34d0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20  llback func);.. 
34e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
34f0: 72 61 63 74 20 76 6f 69 64 20 53 65 74 52 6f 6c  ract void SetRol
3500: 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
3510: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
3520: 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74   func);..    int
3530: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
3540: 6e 74 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63  nt SetLogCallbac
3550: 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62  k(SQLiteLogCallb
3560: 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 0d 0a 20 20  ack func);....  
3570: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3580: 0a 20 20 20 20 2f 2f 2f 20 43 68 65 63 6b 73 20  .    /// Checks 
3590: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
35a0: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
35b0: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
35c0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  in the current p
35d0: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
35e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
35f0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
3600: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3610: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
3620: 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
3630: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
3640: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
3650: 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 2f 2f  process,..    //
3660: 2f 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  / zero otherwise
3670: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3680: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
3690: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f  nal abstract boo
36a0: 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  l IsInitialized(
36b0: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
36c0: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
36d0: 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
36e0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
36f0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 61 74 61  t stmt, int data
3700: 62 61 73 65 2c 20 69 6e 74 20 72 6f 6f 74 50 61  base, int rootPa
3710: 67 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ge);..    intern
3720: 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67  al abstract long
3730: 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73   GetRowIdForCurs
3740: 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  or(SQLiteStateme
3750: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72  nt stmt, int cur
3760: 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  sor);....    int
3770: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6f  ernal abstract o
3780: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53  bject GetValue(S
3790: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
37a0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
37b0: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 3b  SQLiteType typ);
37c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
37d0: 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 41   abstract bool A
37e0: 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b  utoCommit..    {
37f0: 0d 0a 20 20 20 20 20 20 67 65 74 3b 0d 0a 20 20  ..      get;..  
3800: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3810: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
3820: 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
3830: 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
3840: 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
3850: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
3860: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3870: 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53   Creates a new S
3880: 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a  QLite backup obj
3890: 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ect based on the
38a0: 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e   provided destin
38b0: 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
38c0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
38d0: 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  on.  The source 
38e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
38f0: 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a  ion is the one..
3900: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
3910: 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  ed with this obj
3920: 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ect.  The source
3930: 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e   and destination
3940: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
3950: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  // connections c
3960: 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  annot be the sam
3970: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
3980: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3990: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
39a0: 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tCnn">The destin
39b0: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
39c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
39d0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
39e0: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d  am name="destNam
39f0: 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  e">The destinati
3a00: 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  on database name
3a10: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
3a20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3a30: 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20  sourceName">The 
3a40: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
3a50: 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
3a60: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3a70: 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
3a80: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
3a90: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3aa0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3ab0: 74 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49  t SQLiteBackup I
3ac0: 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28  nitializeBackup(
3ad0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3ae0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43  Connection destC
3af0: 6e 6e 2c 20 73 74 72 69 6e 67 20 64 65 73 74 4e  nn, string destN
3b00: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
3b10: 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 29  ring sourceName)
3b20: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
3b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3b40: 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
3b50: 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
3b60: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
3b70: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
3b80: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
3b90: 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
3ba0: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
3bb0: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
3bc0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3bd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3be0: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
3bf0: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
3c00: 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
3c10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3c20: 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
3c30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
3c40: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
3c50: 6f 20 63 6f 70 79 20 6f 72 20 6e 65 67 61 74 69  o copy or negati
3c60: 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72  ve to copy all r
3c70: 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d  emaining pages..
3c80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3c90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3ca0: 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d  m name="retry">.
3cb0: 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20  .    /// Set to 
3cc0: 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72  true if the oper
3cd0: 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ation needs to b
3ce0: 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f  e retried due to
3cf0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
3d00: 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65  // locking issue
3d10: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
3d20: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
3d30: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
3d40: 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61   True if there a
3d50: 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f  re more pages to
3d60: 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73   be copied, fals
3d70: 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20  e otherwise...  
3d80: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
3d90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3da0: 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 53 74 65  bstract bool Ste
3db0: 70 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61  pBackup(SQLiteBa
3dc0: 63 6b 75 70 20 62 61 63 6b 75 70 2c 20 69 6e 74  ckup backup, int
3dd0: 20 6e 50 61 67 65 2c 20 6f 75 74 20 62 6f 6f 6c   nPage, out bool
3de0: 20 72 65 74 72 79 29 3b 0d 0a 0d 0a 20 20 20 20   retry);....    
3df0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3e00: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
3e10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
3e20: 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
3e30: 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
3e40: 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
3e50: 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
3e60: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
3e70: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
3e80: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
3e90: 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
3ea0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
3eb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3ec0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3ed0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
3ee0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
3ef0: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
3f00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
3f10: 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
3f20: 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
3f30: 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
3f40: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
3f50: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3f60: 63 74 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  ct int Remaining
3f70: 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63  Backup(SQLiteBac
3f80: 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a  kup backup);....
3f90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3fa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
3fb0: 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
3fc0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
3fd0: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
3fe0: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
3ff0: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
4000: 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
4010: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
4020: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4030: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4040: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
4050: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
4060: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
4070: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4080: 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
4090: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
40a0: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
40b0: 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
40c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
40d0: 72 61 63 74 20 69 6e 74 20 50 61 67 65 43 6f 75  ract int PageCou
40e0: 6e 74 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42  ntBackup(SQLiteB
40f0: 61 63 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a  ackup backup);..
4100: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4110: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73  ry>..    /// Des
4120: 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70  troys the backup
4130: 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67   object, rolling
4140: 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70   back any backup
4150: 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d   that may be in.
4160: 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73  .    /// progess
4170: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4180: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4190: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
41a0: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
41b0: 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79  bject to destroy
41c0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
41d0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
41e0: 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b   void FinishBack
41f0: 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75 70 20  up(SQLiteBackup 
4200: 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20 20  backup);....    
4210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4270: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
4280: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
4290: 72 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76  rs..    public v
42a0: 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
42b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
42c0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
42d0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
42e0: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
42f0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
4300: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
4310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4370: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44  ..    #region ID
4380: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
4390: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
43a0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
43b0: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69  sposed;..    pri
43c0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
43d0: 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
43e0: 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69  ow */..    {..#i
43f0: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
4400: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20  SED..        if 
4410: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
4420: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4430: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
4440: 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66  Exception(typeof
4450: 28 53 51 4c 69 74 65 42 61 73 65 29 2e 4e 61 6d  (SQLiteBase).Nam
4460: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
4470: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
44e0: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
44f0: 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  al void Dispose(
4500: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
4510: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4520: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
4530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4540: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
4550: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
4560: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
4570: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
4580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
45b0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
45c0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
45d0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
45e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4620: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4630: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4650: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
4660: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
4670: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
4680: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
4690: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
46a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
46c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
46d0: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
46e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
46f0: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
4700: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
4710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4770: 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
4780: 6f 72 0d 0a 20 20 20 20 7e 53 51 4c 69 74 65 42  or..    ~SQLiteB
4790: 61 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ase()..    {..  
47a0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
47b0: 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  lse);..    }..  
47c0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
47d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
47e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 54 68  ///....    // Th
4840: 65 73 65 20 73 74 61 74 69 63 73 20 61 72 65 20  ese statics are 
4850: 68 65 72 65 20 66 6f 72 20 6c 61 63 6b 20 6f 66  here for lack of
4860: 20 61 20 62 65 74 74 65 72 20 70 6c 61 63 65 20   a better place 
4870: 74 6f 20 70 75 74 20 74 68 65 6d 2e 0d 0a 20 20  to put them...  
4880: 20 20 2f 2f 20 54 68 65 79 20 65 78 69 73 74 20    // They exist 
4890: 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65  here because the
48a0: 79 20 61 72 65 20 63 61 6c 6c 65 64 20 64 75 72  y are called dur
48b0: 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 69 7a 61  ing the finaliza
48c0: 74 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 2f 2f 20  tion of..    // 
48d0: 61 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  a SQLiteStatemen
48e0: 74 48 61 6e 64 6c 65 2c 20 53 51 4c 69 74 65 43  tHandle, SQLiteC
48f0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 2c  onnectionHandle,
4900: 20 61 6e 64 20 53 51 4c 69 74 65 46 75 6e 63 74   and SQLiteFunct
4910: 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 2e  ionCookieHandle.
4920: 0d 0a 20 20 20 20 2f 2f 20 54 68 65 72 65 66 6f  ..    // Therefo
4930: 72 65 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f  re these functio
4940: 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 73 74  ns have to be st
4950: 61 74 69 63 2c 20 61 6e 64 20 68 61 76 65 20 74  atic, and have t
4960: 6f 20 62 65 20 6c 6f 77 2d 6c 65 76 65 6c 2e 0d  o be low-level..
4970: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4980: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
4990: 74 4c 61 73 74 45 72 72 6f 72 28 53 51 4c 69 74  tLastError(SQLit
49a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
49b0: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62  e hdl, IntPtr db
49c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
49d0: 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75    if ((hdl == nu
49e0: 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e  ll) || (db == In
49f0: 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
4a00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4a10: 22 6e 75 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  "null connection
4a20: 20 6f 72 20 64 61 74 61 62 61 73 65 20 68 61 6e   or database han
4a30: 64 6c 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dle";....       
4a40: 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 20 20 20   lock (hdl)..   
4a50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a60: 20 20 20 20 69 66 20 28 68 64 6c 2e 49 73 43 6c      if (hdl.IsCl
4a70: 6f 73 65 64 20 7c 7c 20 68 64 6c 2e 49 73 49 6e  osed || hdl.IsIn
4a80: 76 61 6c 69 64 29 0d 0a 20 20 20 20 20 20 20 20  valid)..        
4a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
4aa0: 63 6c 6f 73 65 64 20 6f 72 20 69 6e 76 61 6c 69  closed or invali
4ab0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  d connection han
4ac0: 64 6c 65 22 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  dle";....#if !SQ
4ad0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4ae0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
4af0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  en;..           
4b00: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
4b10: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
4b20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4b30: 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28  _errmsg_interop(
4b40: 64 62 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  db, out len), le
4b50: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4b60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
4b70: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
4b80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4b90: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
4ba0: 62 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  b), -1);..#endif
4bb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
4bc0: 70 72 61 67 6d 61 20 77 61 72 6e 69 6e 67 20 64  pragma warning d
4bd0: 69 73 61 62 6c 65 20 31 36 32 0d 0a 20 20 20 20  isable 162..    
4be0: 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65      GC.KeepAlive
4bf0: 28 68 64 6c 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  (hdl); /* NOTE: 
4c00: 55 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  Unreachable code
4c10: 2e 20 2a 2f 0d 0a 23 70 72 61 67 6d 61 20 77 61  . */..#pragma wa
4c20: 72 6e 69 6e 67 20 72 65 73 74 6f 72 65 20 31 36  rning restore 16
4c30: 32 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  2..    }....    
4c40: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4c50: 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
4c60: 70 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  p(SQLiteConnecti
4c70: 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e  onHandle hdl, In
4c80: 74 50 74 72 20 62 61 63 6b 75 70 29 0d 0a 20 20  tPtr backup)..  
4c90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
4ca0: 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((hdl == null) |
4cb0: 7c 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  | (backup == Int
4cc0: 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72  Ptr.Zero)) retur
4cd0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  n;..        lock
4ce0: 20 28 68 64 6c 29 0d 0a 20 20 20 20 20 20 20 20   (hdl)..        
4cf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
4d00: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
4d10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4d20: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
4d30: 28 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20  (backup);..     
4d40: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
4d50: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
4d60: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e  teException(n, n
4d70: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ull);..        }
4d80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4d90: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
4da0: 6f 69 64 20 46 69 6e 61 6c 69 7a 65 53 74 61 74  oid FinalizeStat
4db0: 65 6d 65 6e 74 28 53 51 4c 69 74 65 43 6f 6e 6e  ement(SQLiteConn
4dc0: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c  ectionHandle hdl
4dd0: 2c 20 49 6e 74 50 74 72 20 73 74 6d 74 29 0d 0a  , IntPtr stmt)..
4de0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
4df0: 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29  f ((hdl == null)
4e00: 20 7c 7c 20 28 73 74 6d 74 20 3d 3d 20 49 6e 74   || (stmt == Int
4e10: 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72  Ptr.Zero)) retur
4e20: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  n;..        lock
4e30: 20 28 68 64 6c 29 0d 0a 20 20 20 20 20 20 20 20   (hdl)..        
4e40: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
4e50: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
4e60: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
4e70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4e80: 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
4e90: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b  e_interop(stmt);
4ea0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
4eb0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
4ec0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4ed0: 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
4ee0: 65 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e(stmt);..#endif
4ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4f00: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
4f10: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
4f20: 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  on(n, null);..  
4f30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4f40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4f50: 74 61 74 69 63 20 76 6f 69 64 20 43 6c 6f 73 65  tatic void Close
4f60: 43 6f 6e 6e 65 63 74 69 6f 6e 28 53 51 4c 69 74  Connection(SQLit
4f70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
4f80: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62  e hdl, IntPtr db
4f90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4fa0: 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75    if ((hdl == nu
4fb0: 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e  ll) || (db == In
4fc0: 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75  tPtr.Zero)) retu
4fd0: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63  rn;..        loc
4fe0: 6b 20 28 68 64 6c 29 0d 0a 20 20 20 20 20 20 20  k (hdl)..       
4ff0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
5000: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5010: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
5020: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5030: 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  s.sqlite3_close_
5040: 69 6e 74 65 72 6f 70 28 64 62 29 3b 0d 0a 23 65  interop(db);..#e
5050: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
5060: 20 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e   ResetConnection
5070: 28 68 64 6c 2c 20 64 62 29 3b 0d 0a 0d 0a 20 20  (hdl, db);....  
5080: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 3b            int n;
5090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
50a0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
50b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
50c0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
50d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
50e0: 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29  te3_close_v2(db)
50f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
5110: 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e  tch (EntryPointN
5120: 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e  otFoundException
5130: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5150: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
5160: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5170: 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 20 20  3_close(db);..  
5180: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
5190: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
51a0: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
51b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
51c0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
51d0: 45 72 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b  Error(hdl, db));
51e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
51f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5200: 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 52  al static void R
5210: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 53  esetConnection(S
5220: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
5230: 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74  andle hdl, IntPt
5240: 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  r db)..    {..  
5250: 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d        if ((hdl =
5260: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d  = null) || (db =
5270: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20  = IntPtr.Zero)) 
5280: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20  return;..       
5290: 20 69 66 20 28 68 64 6c 2e 49 73 43 6c 6f 73 65   if (hdl.IsClose
52a0: 64 20 7c 7c 20 68 64 6c 2e 49 73 49 6e 76 61 6c  d || hdl.IsInval
52b0: 69 64 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20  id) return;..   
52c0: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d       lock (hdl).
52d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
52e0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 73          IntPtr s
52f0: 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tmt = IntPtr.Zer
5300: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
5310: 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20  int n;..        
5320: 20 20 20 20 64 6f 0d 0a 20 20 20 20 20 20 20 20      do..        
5330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5340: 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 55 6e         stmt = Un
5350: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5360: 73 2e 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73  s.sqlite3_next_s
5370: 74 6d 74 28 64 62 2c 20 73 74 6d 74 29 3b 0d 0a  tmt(db, stmt);..
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5390: 69 66 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  if (stmt != IntP
53a0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
53b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
53c0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
53d0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
53e0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
53f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5400: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
5410: 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23 65 6c  erop(stmt);..#el
5420: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
5430: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
5440: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5450: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
5460: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  mt);..#endif..  
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 77  .            } w
5490: 68 69 6c 65 20 28 73 74 6d 74 20 21 3d 20 49 6e  hile (stmt != In
54a0: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20  tPtr.Zero);.... 
54b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49             if (I
54c0: 73 41 75 74 6f 63 6f 6d 6d 69 74 28 68 64 6c 2c  sAutocommit(hdl,
54d0: 20 64 62 29 20 3d 3d 20 66 61 6c 73 65 29 20 2f   db) == false) /
54e0: 2f 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  / a transaction 
54f0: 69 73 20 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  is pending on th
5500: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
5510: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
5530: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5540: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 65  hods.sqlite3_exe
5550: 63 28 64 62 2c 20 54 6f 55 54 46 38 28 22 52 4f  c(db, ToUTF8("RO
5560: 4c 4c 42 41 43 4b 22 29 2c 20 49 6e 74 50 74 72  LLBACK"), IntPtr
5570: 2e 5a 65 72 6f 2c 20 49 6e 74 50 74 72 2e 5a 65  .Zero, IntPtr.Ze
5580: 72 6f 2c 20 6f 75 74 20 73 74 6d 74 29 3b 0d 0a  ro, out stmt);..
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55a0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
55b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
55c0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
55d0: 72 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b 0d  rror(hdl, db));.
55e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
55f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5600: 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28     GC.KeepAlive(
5610: 68 64 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  hdl);..    }....
5620: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5630: 74 69 63 20 62 6f 6f 6c 20 49 73 41 75 74 6f 63  tic bool IsAutoc
5640: 6f 6d 6d 69 74 28 53 51 4c 69 74 65 43 6f 6e 6e  ommit(SQLiteConn
5650: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c  ectionHandle hdl
5660: 2c 20 49 6e 74 50 74 72 20 64 62 29 0d 0a 20 20  , IntPtr db)..  
5670: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 64    {..      if (d
5680: 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
5690: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
56a0: 0a 20 20 20 20 20 20 69 66 20 28 68 64 6c 2e 49  .      if (hdl.I
56b0: 73 43 6c 6f 73 65 64 20 7c 7c 20 68 64 6c 2e 49  sClosed || hdl.I
56c0: 73 49 6e 76 61 6c 69 64 29 20 72 65 74 75 72 6e  sInvalid) return
56d0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 6c   false;..      l
56e0: 6f 63 6b 20 28 68 64 6c 29 0d 0a 20 20 20 20 20  ock (hdl)..     
56f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   {..          re
5700: 74 75 72 6e 20 28 55 6e 73 61 66 65 4e 61 74 69  turn (UnsafeNati
5710: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5720: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5730: 28 64 62 29 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  (db) == 1);..   
5740: 20 20 20 7d 0d 0a 23 70 72 61 67 6d 61 20 77 61     }..#pragma wa
5750: 72 6e 69 6e 67 20 64 69 73 61 62 6c 65 20 31 36  rning disable 16
5760: 32 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70  2..      GC.Keep
5770: 41 6c 69 76 65 28 68 64 6c 29 3b 20 2f 2a 20 4e  Alive(hdl); /* N
5780: 4f 54 45 3a 20 55 6e 72 65 61 63 68 61 62 6c 65  OTE: Unreachable
5790: 20 63 6f 64 65 2e 20 2a 2f 0d 0a 23 70 72 61 67   code. */..#prag
57a0: 6d 61 20 77 61 72 6e 69 6e 67 20 72 65 73 74 6f  ma warning resto
57b0: 72 65 20 31 36 32 0d 0a 20 20 20 20 7d 0d 0a 20  re 162..    }.. 
57c0: 20 7d 0d 0a 0d 0a 20 20 69 6e 74 65 72 6e 61 6c   }....  internal
57d0: 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69   interface ISQLi
57e0: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
57f0: 6e 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 76 6f 69  ns..  {..    voi
5800: 64 20 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d  d BuildTempSchem
5810: 61 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  a(SQLiteConnecti
5820: 6f 6e 20 63 6e 6e 29 3b 0d 0a 20 20 7d 0d 0a 0d  on cnn);..  }...
5830: 0a 20 20 5b 46 6c 61 67 73 5d 0d 0a 20 20 69 6e  .  [Flags]..  in
5840: 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69  ternal enum SQLi
5850: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 0d  teOpenFlagsEnum.
5860: 0a 20 20 7b 0d 0a 20 20 20 20 4e 6f 6e 65 20 3d  .  {..    None =
5870: 20 30 2c 0d 0a 20 20 20 20 52 65 61 64 4f 6e 6c   0,..    ReadOnl
5880: 79 20 3d 20 30 78 30 31 2c 0d 0a 20 20 20 20 52  y = 0x01,..    R
5890: 65 61 64 57 72 69 74 65 20 3d 20 30 78 30 32 2c  eadWrite = 0x02,
58a0: 0d 0a 20 20 20 20 43 72 65 61 74 65 20 3d 20 30  ..    Create = 0
58b0: 78 30 34 2c 0d 0a 20 20 20 20 53 68 61 72 65 64  x04,..    Shared
58c0: 43 61 63 68 65 20 3d 20 30 78 30 31 30 30 30 30  Cache = 0x010000
58d0: 30 30 2c 0d 0a 20 20 20 20 44 65 66 61 75 6c 74  00,..    Default
58e0: 20 3d 20 30 78 30 36 2c 0d 0a 20 20 7d 0d 0a 0d   = 0x06,..  }...
58f0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
5900: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72  ..  /// The extr
5910: 61 20 62 65 68 61 76 69 6f 72 61 6c 20 66 6c 61  a behavioral fla
5920: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 61  gs that can be a
5930: 70 70 6c 69 65 64 20 74 6f 20 61 20 63 6f 6e 6e  pplied to a conn
5940: 65 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c  ection...  /// <
5950: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 5b 46 6c  /summary>..  [Fl
5960: 61 67 73 28 29 5d 0d 0a 20 20 70 75 62 6c 69 63  ags()]..  public
5970: 20 65 6e 75 6d 20 53 51 4c 69 74 65 43 6f 6e 6e   enum SQLiteConn
5980: 65 63 74 69 6f 6e 46 6c 61 67 73 0d 0a 20 20 7b  ectionFlags..  {
5990: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
59a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
59b0: 20 4e 6f 20 65 78 74 72 61 20 66 6c 61 67 73 2e   No extra flags.
59c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
59d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f  mmary>..      No
59e0: 6e 65 20 3d 20 30 78 30 2c 0d 0a 0d 0a 20 20 20  ne = 0x0,....   
59f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5a00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
5a10: 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c  le logging of al
5a20: 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
5a30: 20 74 6f 20 62 65 20 70 72 65 70 61 72 65 64 2e   to be prepared.
5a40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
5a50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f  mmary>..      Lo
5a60: 67 50 72 65 70 61 72 65 20 3d 20 30 78 31 2c 0d  gPrepare = 0x1,.
5a70: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
5a80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
5a90: 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67  / Enable logging
5aa0: 20 6f 66 20 61 6c 6c 20 62 6f 75 6e 64 20 70 61   of all bound pa
5ab0: 72 61 6d 65 74 65 72 20 74 79 70 65 73 20 61 6e  rameter types an
5ac0: 64 20 72 61 77 20 76 61 6c 75 65 73 2e 0d 0a 20  d raw values... 
5ad0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
5ae0: 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 50 72  ry>..      LogPr
5af0: 65 42 69 6e 64 20 3d 20 30 78 32 2c 0d 0a 0d 0a  eBind = 0x2,....
5b00: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5b10: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45  ry>..      /// E
5b20: 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66  nable logging of
5b30: 20 61 6c 6c 20 62 6f 75 6e 64 20 70 61 72 61 6d   all bound param
5b40: 65 74 65 72 20 73 74 72 6f 6e 67 6c 79 20 74 79  eter strongly ty
5b50: 70 65 64 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  ped values...   
5b60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5b70: 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 42 69 6e 64  >..      LogBind
5b80: 20 3d 20 30 78 34 2c 0d 0a 0d 0a 20 20 20 20 20   = 0x4,....     
5b90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5ba0: 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65        /// Enable
5bb0: 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20   logging of all 
5bc0: 65 78 63 65 70 74 69 6f 6e 73 20 63 61 75 67 68  exceptions caugh
5bd0: 74 20 66 72 6f 6d 20 75 73 65 72 2d 70 72 6f 76  t from user-prov
5be0: 69 64 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ided..      /// 
5bf0: 6d 61 6e 61 67 65 64 20 63 6f 64 65 20 63 61 6c  managed code cal
5c00: 6c 65 64 20 66 72 6f 6d 20 6e 61 74 69 76 65 20  led from native 
5c10: 63 6f 64 65 20 76 69 61 20 64 65 6c 65 67 61 74  code via delegat
5c20: 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  es...      /// <
5c30: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5c40: 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65   LogCallbackExce
5c50: 70 74 69 6f 6e 20 3d 20 30 78 38 2c 0d 0a 0d 0a  ption = 0x8,....
5c60: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5c70: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45  ry>..      /// E
5c80: 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66  nable logging of
5c90: 20 62 61 63 6b 75 70 20 41 50 49 20 65 72 72 6f   backup API erro
5ca0: 72 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  rs...      /// <
5cb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5cc0: 20 4c 6f 67 42 61 63 6b 75 70 20 3d 20 30 78 31   LogBackup = 0x1
5cd0: 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
5ce0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
5cf0: 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 61 6c 6c 20   /// Enable all 
5d00: 6c 6f 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20  logging...      
5d10: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5d20: 20 20 20 20 20 20 4c 6f 67 41 6c 6c 20 3d 20 4c        LogAll = L
5d30: 6f 67 50 72 65 70 61 72 65 20 7c 20 4c 6f 67 50  ogPrepare | LogP
5d40: 72 65 42 69 6e 64 20 7c 20 4c 6f 67 42 69 6e 64  reBind | LogBind
5d50: 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   |..            
5d60: 20 20 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78     LogCallbackEx
5d70: 63 65 70 74 69 6f 6e 20 7c 20 4c 6f 67 42 61 63  ception | LogBac
5d80: 6b 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  kup,....      //
5d90: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5da0: 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
5db0: 6c 74 20 65 78 74 72 61 20 66 6c 61 67 73 20 66  lt extra flags f
5dc0: 6f 72 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f  or new connectio
5dd0: 6e 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ns...      /// <
5de0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5df0: 20 44 65 66 61 75 6c 74 20 3d 20 4c 6f 67 43 61   Default = LogCa
5e00: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 0d  llbackException.
5e10: 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 20 54 68 65  .  }....  // The
5e20: 73 65 20 61 72 65 20 74 68 65 20 6f 70 74 69 6f  se are the optio
5e30: 6e 73 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e  ns to the intern
5e40: 61 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  al sqlite3_confi
5e50: 67 20 63 61 6c 6c 2e 0d 0a 20 20 69 6e 74 65 72  g call...  inter
5e60: 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 43  nal enum SQLiteC
5e70: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 0d 0a 20 20  onfigOpsEnum..  
5e80: 7b 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f  {..    SQLITE_CO
5e90: 4e 46 49 47 5f 4e 4f 4e 45 20 3d 20 30 2c 20 2f  NFIG_NONE = 0, /
5ea0: 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49  / nil ..    SQLI
5eb0: 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45  TE_CONFIG_SINGLE
5ec0: 54 48 52 45 41 44 20 3d 20 31 2c 20 2f 2f 20 6e  THREAD = 1, // n
5ed0: 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  il ..    SQLITE_
5ee0: 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45  CONFIG_MULTITHRE
5ef0: 41 44 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 20 0d  AD = 2, // nil .
5f00: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
5f10: 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d 20  IG_SERIALIZED = 
5f20: 33 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20  3, // nil ..    
5f30: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41  SQLITE_CONFIG_MA
5f40: 4c 4c 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71 6c  LLOC = 4, // sql
5f50: 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
5f60: 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  * ..    SQLITE_C
5f70: 4f 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20  ONFIG_GETMALLOC 
5f80: 3d 20 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f  = 5, // sqlite3_
5f90: 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20  mem_methods* .. 
5fa0: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
5fb0: 5f 53 43 52 41 54 43 48 20 3d 20 36 2c 20 2f 2f  _SCRATCH = 6, //
5fc0: 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a 2c 20   void*, int sz, 
5fd0: 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51 4c 49  int N ..    SQLI
5fe0: 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41  TE_CONFIG_PAGECA
5ff0: 43 48 45 20 3d 20 37 2c 20 2f 2f 20 76 6f 69 64  CHE = 7, // void
6000: 2a 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20 4e  *, int sz, int N
6010: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
6020: 4e 46 49 47 5f 48 45 41 50 20 3d 20 38 2c 20 2f  NFIG_HEAP = 8, /
6030: 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 6e 42 79  / void*, int nBy
6040: 74 65 2c 20 69 6e 74 20 6d 69 6e 20 0d 0a 20 20  te, int min ..  
6050: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
6060: 4d 45 4d 53 54 41 54 55 53 20 3d 20 39 2c 20 2f  MEMSTATUS = 9, /
6070: 2f 20 62 6f 6f 6c 65 61 6e 20 0d 0a 20 20 20 20  / boolean ..    
6080: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
6090: 54 45 58 20 3d 20 31 30 2c 20 2f 2f 20 73 71 6c  TEX = 10, // sql
60a0: 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
60b0: 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  ds* ..    SQLITE
60c0: 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45 58  _CONFIG_GETMUTEX
60d0: 20 3d 20 31 31 2c 20 2f 2f 20 73 71 6c 69 74 65   = 11, // sqlite
60e0: 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 2a  3_mutex_methods*
60f0: 20 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69 6f   ..    // previo
6100: 75 73 6c 79 20 53 51 4c 49 54 45 5f 43 4f 4e 46  usly SQLITE_CONF
6110: 49 47 5f 43 48 55 4e 4b 41 4c 4c 4f 43 20 31 32  IG_CHUNKALLOC 12
6120: 20 77 68 69 63 68 20 69 73 20 6e 6f 77 20 75 6e   which is now un
6130: 75 73 65 64 0d 0a 20 20 20 20 53 51 4c 49 54 45  used..    SQLITE
6140: 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44  _CONFIG_LOOKASID
6150: 45 20 3d 20 31 33 2c 20 2f 2f 20 69 6e 74 20 69  E = 13, // int i
6160: 6e 74 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  nt ..    SQLITE_
6170: 43 4f 4e 46 49 47 5f 50 43 41 43 48 45 20 3d 20  CONFIG_PCACHE = 
6180: 31 34 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70  14, // sqlite3_p
6190: 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d  cache_methods* .
61a0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
61b0: 49 47 5f 47 45 54 50 43 41 43 48 45 20 3d 20 31  IG_GETPCACHE = 1
61c0: 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63  5, // sqlite3_pc
61d0: 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a  ache_methods* ..
61e0: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
61f0: 47 5f 4c 4f 47 20 3d 20 31 36 2c 20 2f 2f 20 78  G_LOG = 16, // x
6200: 46 75 6e 63 2c 20 76 6f 69 64 2a 20 0d 0a 20 20  Func, void* ..  
6210: 7d 0d 0a 0d 0a 7d 0d 0a                          }....}..