System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a75e44c8f18f87916f345353e1297734e67b9277:


0000: 2f 2a 2a 2a 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 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n 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 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69 66 20 21  System;....#if !
0160: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
0170: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 75 73 69  FRAMEWORK..  usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d  ng System.Runtim
0190: 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63 65  e.InteropService
01a0: 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  s;..#endif....  
01b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
01c0: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 6e   /// This intern
01d0: 61 6c 20 63 6c 61 73 73 20 70 72 6f 76 69 64 65  al class provide
01e0: 73 20 74 68 65 20 66 6f 75 6e 64 61 74 69 6f 6e  s the foundation
01f0: 20 6f 66 20 53 51 4c 69 74 65 20 73 75 70 70 6f   of SQLite suppo
0200: 72 74 2e 20 20 49 74 20 64 65 66 69 6e 65 73 20  rt.  It defines 
0210: 61 6c 6c 20 74 68 65 20 61 62 73 74 72 61 63 74  all the abstract
0220: 20 6d 65 6d 62 65 72 73 20 6e 65 65 64 65 64 20   members needed 
0230: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0d 0a 20 20  to implement..  
0240: 2f 2f 2f 20 61 20 53 51 4c 69 74 65 20 64 61 74  /// a SQLite dat
0250: 61 20 70 72 6f 76 69 64 65 72 2c 20 61 6e 64 20  a provider, and 
0260: 69 6e 68 65 72 69 74 73 20 66 72 6f 6d 20 53 51  inherits from SQ
0270: 4c 69 74 65 43 6f 6e 76 65 72 74 20 77 68 69 63  LiteConvert whic
0280: 68 20 61 6c 6c 6f 77 73 20 66 6f 72 20 73 69 6d  h allows for sim
0290: 70 6c 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  ple translations
02a0: 20 6f 66 20 73 74 72 69 6e 67 20 74 6f 20 61 6e   of string to an
02b0: 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 2e 0d 0a  d from SQLite...
02c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
02d0: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73  ..  internal abs
02e0: 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69  tract class SQLi
02f0: 74 65 42 61 73 65 20 3a 20 53 51 4c 69 74 65 43  teBase : SQLiteC
0300: 6f 6e 76 65 72 74 2c 20 49 44 69 73 70 6f 73 61  onvert, IDisposa
0310: 62 6c 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  ble..  {..    in
0320: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73  ternal SQLiteBas
0330: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
0340: 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
0350: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
0360: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
0370: 69 6e 64 29 20 7b 20 7d 0d 0a 0d 0a 20 20 20 20  ind) { }....    
0380: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0390: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61     /// Returns a
03a0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
03b0: 74 69 6e 67 20 74 68 65 20 61 63 74 69 76 65 20  ting the active 
03c0: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
03d0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
03e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
03f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
0400: 69 6e 67 20 56 65 72 73 69 6f 6e 20 7b 20 67 65  ing Version { ge
0410: 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  t; }..    /// <s
0420: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0430: 20 52 65 74 75 72 6e 73 20 74 68 65 20 72 6f 77   Returns the row
0440: 69 64 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  id of the most r
0450: 65 63 65 6e 74 20 73 75 63 63 65 73 73 66 75 6c  ecent successful
0460: 20 49 4e 53 45 52 54 20 69 6e 74 6f 20 74 68 65   INSERT into the
0470: 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 74   database from t
0480: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  his connection..
0490: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
04a0: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
04b0: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
04c0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 20  LastInsertRowId 
04d0: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
04e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
04f0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
0500: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
0510: 65 73 20 74 68 65 20 6c 61 73 74 20 65 78 65 63  es the last exec
0520: 75 74 69 6e 67 20 69 6e 73 65 72 74 2f 75 70 64  uting insert/upd
0530: 61 74 65 20 63 61 75 73 65 64 2e 0d 0a 20 20 20  ate caused...   
0540: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0550: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0560: 73 74 72 61 63 74 20 69 6e 74 20 43 68 61 6e 67  stract int Chang
0570: 65 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  es { get; }..   
0580: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0590: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
05a0: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
05b0: 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20  mory (in bytes) 
05c0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
05d0: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63   by the SQLite c
05e0: 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68  ore library.  Th
05f0: 69 73 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  is is not really
0600: 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f   a per-connectio
0610: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65  n..    /// value
0620: 2c 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  , it is global t
0630: 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a  o the process...
0640: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0650: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0660: 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 4d   abstract long M
0670: 65 6d 6f 72 79 55 73 65 64 20 7b 20 67 65 74 3b  emoryUsed { get;
0680: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
0690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
06a0: 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
06b0: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d  um amount of mem
06c0: 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20 75  ory (in bytes) u
06d0: 73 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  sed by the SQLit
06e0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 73  e core library s
06f0: 69 6e 63 65 20 74 68 65 20 68 69 67 68 2d 77 61  ince the high-wa
0700: 74 65 72 20 6d 61 72 6b 20 77 61 73 20 6c 61 73  ter mark was las
0710: 74 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f  t reset...    //
0720: 2f 20 54 68 69 73 20 69 73 20 6e 6f 74 20 72 65  / This is not re
0730: 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65  ally a per-conne
0740: 63 74 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74 20  ction value, it 
0750: 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
0760: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
0770: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0780: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
0790: 72 61 63 74 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ract long Memory
07a0: 48 69 67 68 77 61 74 65 72 20 7b 20 67 65 74 3b  Highwater { get;
07b0: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
07c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
07d0: 65 74 73 20 74 68 65 20 73 74 61 74 75 73 20 6f  ets the status o
07e0: 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 75 73 61  f the memory usa
07f0: 67 65 20 74 72 61 63 6b 69 6e 67 20 73 75 62 73  ge tracking subs
0800: 79 73 74 65 6d 20 69 6e 20 74 68 65 20 53 51 4c  ystem in the SQL
0810: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
0820: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
0830: 68 69 73 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d  his is enabled..
0840: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 69 73  .    /// If this
0850: 20 69 73 20 64 69 73 61 62 6c 65 64 2c 20 6d 65   is disabled, me
0860: 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b  mory usage track
0870: 69 6e 67 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ing will not be 
0880: 70 65 72 66 6f 72 6d 65 64 2e 20 20 54 68 69 73  performed.  This
0890: 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61   is not really a
08a0: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
08b0: 76 61 6c 75 65 2c 20 69 74 20 69 73 0d 0a 20 20  value, it is..  
08c0: 20 20 2f 2f 2f 20 67 6c 6f 62 61 6c 20 74 6f 20    /// global to 
08d0: 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  the process...  
08e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
08f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0900: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 4e 6f   name="value">No
0910: 6e 2d 7a 65 72 6f 20 74 6f 20 65 6e 61 62 6c 65  n-zero to enable
0920: 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74 72   memory usage tr
0930: 61 63 6b 69 6e 67 2c 20 7a 65 72 6f 20 6f 74 68  acking, zero oth
0940: 65 72 77 69 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  erwise.</param>.
0950: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0960: 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s>A standard SQL
0970: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
0980: 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73  (i.e. zero for s
0990: 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a  uccess and non-z
09a0: 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  ero for failure)
09b0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
09c0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
09d0: 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
09e0: 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  de SetMemoryStat
09f0: 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 3b 0d  us(bool value);.
0a00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0a10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
0a20: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
0a30: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
0a40: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
0a50: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
0a60: 74 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73  t config options
0a70: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65  ...    /// We de
0a80: 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69  pend on auto ini
0a90: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72  tialization to r
0aa0: 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  ecover...    ///
0ab0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0ac0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
0ad0: 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
0ae0: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 3b 0d 0a  de Shutdown();..
0af0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
0b10: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  ns non-zero if a
0b20: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0b30: 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2e 0d 0a 20  tion is open... 
0b40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
0b60: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
0b70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0b80: 74 72 61 63 74 20 62 6f 6f 6c 20 49 73 4f 70 65  tract bool IsOpe
0b90: 6e 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  n();..    /// <s
0ba0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0bb0: 20 4f 70 65 6e 73 20 61 20 64 61 74 61 62 61 73   Opens a databas
0bc0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
0bd0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0be0: 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  <remarks>..    /
0bf0: 2f 2f 20 49 6d 70 6c 65 6d 65 6e 74 65 72 73 20  // Implementers 
0c00: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51 4c 69  should call SQLi
0c10: 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46  teFunction.BindF
0c20: 75 6e 63 74 69 6f 6e 73 28 29 20 61 6e 64 20 73  unctions() and s
0c30: 61 76 65 20 74 68 65 20 61 72 72 61 79 20 61 66  ave the array af
0c40: 74 65 72 20 6f 70 65 6e 69 6e 67 20 61 20 63 6f  ter opening a co
0c50: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  nnection..    //
0c60: 2f 20 74 6f 20 62 69 6e 64 20 61 6c 6c 20 61 74  / to bind all at
0c70: 74 72 69 62 75 74 65 64 20 75 73 65 72 2d 64 65  tributed user-de
0c80: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  fined functions 
0c90: 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  and collating se
0ca0: 71 75 65 6e 63 65 73 20 74 6f 20 74 68 65 20 6e  quences to the n
0cb0: 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  ew connection...
0cc0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
0cd0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
0ce0: 61 6d 20 6e 61 6d 65 3d 22 73 74 72 46 69 6c 65  am name="strFile
0cf0: 6e 61 6d 65 22 3e 54 68 65 20 66 69 6c 65 6e 61  name">The filena
0d00: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
0d10: 73 65 20 74 6f 20 6f 70 65 6e 2e 20 20 53 51 4c  se to open.  SQL
0d20: 69 74 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ite automaticall
0d30: 79 20 63 72 65 61 74 65 73 20 69 74 20 69 66 20  y creates it if 
0d40: 69 74 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74  it doesn't exist
0d50: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
0d60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0d70: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 22  connectionFlags"
0d80: 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63  >The flags assoc
0d90: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70  iated with the p
0da0: 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  arent connection
0db0: 20 6f 62 6a 65 63 74 3c 2f 70 61 72 61 6d 3e 0d   object</param>.
0dc0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0dd0: 6e 61 6d 65 3d 22 6f 70 65 6e 46 6c 61 67 73 22  name="openFlags"
0de0: 3e 54 68 65 20 6f 70 65 6e 20 66 6c 61 67 73 20  >The open flags 
0df0: 74 6f 20 75 73 65 20 77 68 65 6e 20 63 72 65 61  to use when crea
0e00: 74 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  ting the connect
0e10: 69 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ion</param>..   
0e20: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0e30: 3d 22 6d 61 78 50 6f 6f 6c 53 69 7a 65 22 3e 54  ="maxPoolSize">T
0e40: 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  he maximum size 
0e50: 6f 66 20 74 68 65 20 70 6f 6f 6c 20 66 6f 72 20  of the pool for 
0e60: 74 68 65 20 67 69 76 65 6e 20 66 69 6c 65 6e 61  the given filena
0e70: 6d 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  me</param>..    
0e80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0e90: 22 75 73 65 50 6f 6f 6c 22 3e 49 66 20 74 72 75  "usePool">If tru
0ea0: 65 2c 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  e, the connectio
0eb0: 6e 20 63 61 6e 20 62 65 20 70 75 6c 6c 65 64 20  n can be pulled 
0ec0: 66 72 6f 6d 20 74 68 65 20 63 6f 6e 6e 65 63 74  from the connect
0ed0: 69 6f 6e 20 70 6f 6f 6c 3c 2f 70 61 72 61 6d 3e  ion pool</param>
0ee0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0ef0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 4f 70 65  bstract void Ope
0f00: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
0f10: 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  name, SQLiteConn
0f20: 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e  ectionFlags conn
0f30: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c  ectionFlags, SQL
0f40: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
0f50: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20   openFlags, int 
0f60: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
0f70: 6c 20 75 73 65 50 6f 6f 6c 29 3b 0d 0a 20 20 20  l usePool);..   
0f80: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0f90: 20 20 20 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74      /// Closes t
0fa0: 68 65 20 63 75 72 72 65 6e 74 6c 79 2d 6f 70 65  he currently-ope
0fb0: 6e 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  n database...   
0fc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0fd0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
0fe0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 66 74 65  s>..    /// Afte
0ff0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
1000: 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 20 69  as been closed i
1010: 6d 70 6c 65 6d 65 74 65 72 73 20 73 68 6f 75 6c  mplemeters shoul
1020: 64 20 63 61 6c 6c 20 53 51 4c 69 74 65 46 75 6e  d call SQLiteFun
1030: 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63  ction.UnbindFunc
1040: 74 69 6f 6e 73 28 29 20 74 6f 20 64 65 61 6c 6c  tions() to deall
1050: 6f 63 61 74 65 20 61 6c 6c 20 69 6e 74 65 72 6f  ocate all intero
1060: 70 20 61 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20  p allocated..   
1070: 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 61 73 73 6f   /// memory asso
1080: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1090: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
10a0: 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61  ctions and colla
10b0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74  ting sequences t
10c0: 69 65 64 20 74 6f 20 74 68 65 20 63 6c 6f 73 65  ied to the close
10d0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  d connection... 
10e0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
10f0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1100: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 6c  abstract void Cl
1110: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  ose();..    /// 
1120: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1130: 2f 2f 20 53 65 74 73 20 74 68 65 20 62 75 73 79  // Sets the busy
1140: 20 74 69 6d 65 6f 75 74 20 6f 6e 20 74 68 65 20   timeout on the 
1150: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 53 51 4c  connection.  SQL
1160: 69 74 65 43 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  iteCommand will 
1170: 63 61 6c 6c 20 74 68 69 73 20 62 65 66 6f 72 65  call this before
1180: 20 65 78 65 63 75 74 69 6e 67 20 61 6e 79 20 63   executing any c
1190: 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f  ommand...    ///
11a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
11b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11c0: 3d 22 6e 54 69 6d 65 6f 75 74 4d 53 22 3e 54 68  ="nTimeoutMS">Th
11d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  e number of mill
11e0: 69 73 65 63 6f 6e 64 73 20 74 6f 20 77 61 69 74  iseconds to wait
11f0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
1200: 67 20 53 51 4c 49 54 45 5f 42 55 53 59 3c 2f 70  g SQLITE_BUSY</p
1210: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
1220: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1230: 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74  d SetTimeout(int
1240: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
1250: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1260: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1270: 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
1280: 65 20 6c 61 73 74 20 65 72 72 6f 72 20 69 73 73  e last error iss
1290: 75 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20  ued by SQLite.. 
12a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12c0: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
12d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
12e0: 74 72 61 63 74 20 73 74 72 69 6e 67 20 47 65 74  tract string Get
12f0: 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  LastError();....
1300: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1310: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20  >..    /// When 
1320: 70 6f 6f 6c 69 6e 67 20 69 73 20 65 6e 61 62 6c  pooling is enabl
1330: 65 64 2c 20 66 6f 72 63 65 20 74 68 69 73 20 63  ed, force this c
1340: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 62 65 20  onnection to be 
1350: 64 69 73 70 6f 73 65 64 20 72 61 74 68 65 72 20  disposed rather 
1360: 74 68 61 6e 20 72 65 74 75 72 6e 65 64 20 74 6f  than returned to
1370: 20 74 68 65 20 70 6f 6f 6c 0d 0a 20 20 20 20 2f   the pool..    /
1380: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1390: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
13a0: 72 61 63 74 20 76 6f 69 64 20 43 6c 65 61 72 50  ract void ClearP
13b0: 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ool();....    //
13c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13d0: 20 2f 2f 2f 20 57 68 65 6e 20 70 6f 6f 6c 69 6e   /// When poolin
13e0: 67 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 72 65  g is enabled, re
13f0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1400: 20 6f 66 20 70 6f 6f 6c 20 65 6e 74 72 69 65 73   of pool entries
1410: 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 63 75   matching the cu
1420: 72 72 65 6e 74 20 66 69 6c 65 20 6e 61 6d 65 2e  rrent file name.
1430: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1440: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
1450: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
1460: 72 20 6f 66 20 70 6f 6f 6c 20 65 6e 74 72 69 65  r of pool entrie
1470: 73 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 63  s matching the c
1480: 75 72 72 65 6e 74 20 66 69 6c 65 20 6e 61 6d 65  urrent file name
1490: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
14a0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
14b0: 63 74 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c  ct int CountPool
14c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ();....    /// <
14d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14e0: 2f 20 50 72 65 70 61 72 65 73 20 61 20 53 51 4c  / Prepares a SQL
14f0: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 65   statement for e
1500: 78 65 63 75 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xecution...    /
1510: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1520: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1530: 6d 65 3d 22 63 6e 6e 22 3e 54 68 65 20 73 6f 75  me="cnn">The sou
1540: 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  rce connection p
1550: 72 65 70 61 72 69 6e 67 20 74 68 65 20 63 6f 6d  reparing the com
1560: 6d 61 6e 64 2e 20 20 43 61 6e 20 62 65 20 6e 75  mand.  Can be nu
1570: 6c 6c 20 66 6f 72 20 61 6e 79 20 63 61 6c 6c 65  ll for any calle
1580: 72 20 65 78 63 65 70 74 20 4c 49 4e 51 3c 2f 70  r except LINQ</p
1590: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53  param name="strS
15b0: 71 6c 22 3e 54 68 65 20 53 51 4c 20 63 6f 6d 6d  ql">The SQL comm
15c0: 61 6e 64 20 74 65 78 74 20 74 6f 20 70 72 65 70  and text to prep
15d0: 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  are</param>..   
15e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15f0: 3d 22 70 72 65 76 69 6f 75 73 22 3e 54 68 65 20  ="previous">The 
1600: 70 72 65 76 69 6f 75 73 20 73 74 61 74 65 6d 65  previous stateme
1610: 6e 74 20 69 6e 20 61 20 6d 75 6c 74 69 2d 73 74  nt in a multi-st
1620: 61 74 65 6d 65 6e 74 20 63 6f 6d 6d 61 6e 64 2c  atement command,
1630: 20 6f 72 20 6e 75 6c 6c 20 69 66 20 6e 6f 20 70   or null if no p
1640: 72 65 76 69 6f 75 73 20 73 74 61 74 65 6d 65 6e  revious statemen
1650: 74 20 65 78 69 73 74 73 3c 2f 70 61 72 61 6d 3e  t exists</param>
1660: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1670: 20 6e 61 6d 65 3d 22 74 69 6d 65 6f 75 74 4d 53   name="timeoutMS
1680: 22 3e 54 68 65 20 74 69 6d 65 6f 75 74 20 74 6f  ">The timeout to
1690: 20 77 61 69 74 20 62 65 66 6f 72 65 20 61 62 6f   wait before abo
16a0: 72 74 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  rting the prepar
16b0: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
16c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16d0: 73 74 72 52 65 6d 61 69 6e 22 3e 54 68 65 20 72  strRemain">The r
16e0: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
16f0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77  statement that w
1700: 61 73 20 6e 6f 74 20 70 72 6f 63 65 73 73 65 64  as not processed
1710: 2e 20 20 45 61 63 68 20 63 61 6c 6c 20 74 6f 20  .  Each call to 
1720: 70 72 65 70 61 72 65 20 70 61 72 73 65 73 20 74  prepare parses t
1730: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 20  he..    /// SQL 
1740: 75 70 20 74 6f 20 74 6f 20 65 69 74 68 65 72 20  up to to either 
1750: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
1760: 65 78 74 20 6f 72 20 74 6f 20 74 68 65 20 66 69  ext or to the fi
1770: 72 73 74 20 73 65 6d 69 2d 63 6f 6c 6f 6e 20 64  rst semi-colon d
1780: 65 6c 69 6d 69 74 65 72 2e 20 20 54 68 65 20 72  elimiter.  The r
1790: 65 6d 61 69 6e 69 6e 67 20 74 65 78 74 20 69 73  emaining text is
17a0: 20 72 65 74 75 72 6e 65 64 0d 0a 20 20 20 20 2f   returned..    /
17b0: 2f 2f 20 68 65 72 65 20 66 6f 72 20 61 20 73 75  // here for a su
17c0: 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
17d0: 20 50 72 65 70 61 72 65 28 29 20 75 6e 74 69 6c   Prepare() until
17e0: 20 61 6c 6c 20 74 68 65 20 74 65 78 74 20 68 61   all the text ha
17f0: 73 20 62 65 65 6e 20 70 72 6f 63 65 73 73 65 64  s been processed
1800: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
1810: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
1820: 72 6e 73 20 61 6e 20 69 6e 69 74 69 61 6c 69 7a  rns an initializ
1830: 65 64 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ed SQLiteStateme
1840: 6e 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  nt.</returns>.. 
1850: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1860: 72 61 63 74 20 53 51 4c 69 74 65 53 74 61 74 65  ract SQLiteState
1870: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
1880: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
1890: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
18a0: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
18b0: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
18c0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
18d0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
18e0: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
18f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
1900: 74 65 70 73 20 74 68 72 6f 75 67 68 20 61 20 70  teps through a p
1910: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1920: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
1930: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1940: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
1950: 74 22 3e 54 68 65 20 53 51 4c 69 74 65 53 74 61  t">The SQLiteSta
1960: 74 65 6d 65 6e 74 20 74 6f 20 73 74 65 70 20 74  tement to step t
1970: 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
1980: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1990: 3e 54 72 75 65 20 69 66 20 61 20 72 6f 77 20 77  >True if a row w
19a0: 61 73 20 72 65 74 75 72 6e 65 64 2c 20 46 61 6c  as returned, Fal
19b0: 73 65 20 69 66 20 6e 6f 74 2e 3c 2f 72 65 74 75  se if not.</retu
19c0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
19d0: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
19e0: 20 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74   Step(SQLiteStat
19f0: 65 6d 65 6e 74 20 73 74 6d 74 29 3b 0d 0a 20 20  ement stmt);..  
1a00: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1a10: 0a 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20  .    /// Resets 
1a20: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
1a30: 6d 65 6e 74 20 73 6f 20 69 74 20 63 61 6e 20 62  ment so it can b
1a40: 65 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e  e executed again
1a50: 2e 20 20 49 66 20 74 68 65 20 65 72 72 6f 72 20  .  If the error 
1a60: 72 65 74 75 72 6e 65 64 20 69 73 20 53 51 4c 49  returned is SQLI
1a70: 54 45 5f 53 43 48 45 4d 41 2c 20 0d 0a 20 20 20  TE_SCHEMA, ..   
1a80: 20 2f 2f 2f 20 74 72 61 6e 73 70 61 72 65 6e 74   /// transparent
1a90: 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  ly attempt to re
1aa0: 62 75 69 6c 64 20 74 68 65 20 53 51 4c 20 73 74  build the SQL st
1ab0: 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 72 6f  atement and thro
1ac0: 77 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  w an error if th
1ad0: 61 74 20 77 61 73 20 6e 6f 74 20 70 6f 73 73 69  at was not possi
1ae0: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
1af0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1b00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
1b10: 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
1b20: 6e 74 20 74 6f 20 72 65 73 65 74 3c 2f 70 61 72  nt to reset</par
1b30: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1b40: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31  turns>Returns -1
1b50: 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   if the schema c
1b60: 68 61 6e 67 65 64 20 77 68 69 6c 65 20 72 65 73  hanged while res
1b70: 65 74 74 69 6e 67 2c 20 30 20 69 66 20 74 68 65  etting, 0 if the
1b80: 20 72 65 73 65 74 20 77 61 73 20 73 75 63 65 73   reset was suces
1b90: 73 66 75 6c 20 6f 72 20 36 20 28 53 51 4c 49 54  sful or 6 (SQLIT
1ba0: 45 5f 4c 4f 43 4b 45 44 29 20 69 66 20 74 68 65  E_LOCKED) if the
1bb0: 20 72 65 73 65 74 20 66 61 69 6c 65 64 20 64 75   reset failed du
1bc0: 65 20 74 6f 20 61 20 6c 6f 63 6b 3c 2f 72 65 74  e to a lock</ret
1bd0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1be0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c  nal abstract SQL
1bf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73  iteErrorCode Res
1c00: 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  et(SQLiteStateme
1c10: 6e 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69  nt stmt);..    i
1c20: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1c30: 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 3b 0d   void Cancel();.
1c40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1c50: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1c60: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(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 64 6f 75 62 6c 65 20 76   index, double v
1cb0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65  alue);..    inte
1cc0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1cd0: 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51  id Bind_Int32(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 49 6e 74 33   int index, Int3
1d20: 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  2 value);..    i
1d30: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1d40: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33   void Bind_UInt3
1d50: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(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: 55 49 6e 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a  UInt32 value);..
1da0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1db0: 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f  tract void Bind_
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 49 6e 74 36 34 20 76 61 6c 75 65 29  ex, Int64 value)
1e10: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1e20: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1e30: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
1e40: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1e50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1e60: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
1e70: 20 69 6e 64 65 78 2c 20 55 49 6e 74 36 34 20 76   index, UInt64 v
1e80: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65  alue);..    inte
1e90: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1ea0: 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c  id Bind_Text(SQL
1eb0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1ec0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
1ed0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
1ee0: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
1ef0: 67 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  g value);..    i
1f00: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1f10: 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28   void Bind_Blob(
1f20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1f30: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
1f40: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
1f50: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  s, int index, by
1f60: 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 3b 0d  te[] blobData);.
1f70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1f80: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
1f90: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
1fa0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1fb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1fc0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
1fd0: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
1fe0: 20 64 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72   dt);..    inter
1ff0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
2000: 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69  d Bind_Null(SQLi
2010: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2020: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
2030: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
2040: 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  nt index);....  
2050: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2060: 61 63 74 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  act int Bind_Par
2070: 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  amCount(SQLiteSt
2080: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
2090: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
20a0: 61 67 73 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20  ags flags);..   
20b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
20c0: 63 74 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  ct string Bind_P
20d0: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
20e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
20f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2100: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
2110: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
2120: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
2130: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
2140: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
2150: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
2160: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
2170: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
2180: 61 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  amName);....    
2190: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
21a0: 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t int ColumnCoun
21b0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
21c0: 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e  t stmt);..    in
21d0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
21e0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
21f0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
2200: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2210: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
2220: 6c 20 61 62 73 74 72 61 63 74 20 54 79 70 65 41  l abstract TypeA
2230: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
2240: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
2250: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2260: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2270: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2280: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
2290: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
22a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
22b0: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
22c0: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 3b 0d  ity nAffinity);.
22d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
22e0: 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d  stract int Colum
22f0: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
2300: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
2310: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b  ing columnName);
2320: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2330: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 43  bstract string C
2340: 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
2350: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
2360: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2370: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
2380: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
2390: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
23a0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
23b0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
23c0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
23d0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
23e0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
23f0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
2400: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
2410: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
2420: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
2430: 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  id ColumnMetaDat
2440: 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73  a(string dataBas
2450: 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c  e, string table,
2460: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
2470: 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74 61 54  out string dataT
2480: 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  ype, out string 
2490: 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c  collateSequence,
24a0: 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c   out bool notNul
24b0: 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d  l, out bool prim
24c0: 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c  aryKey, out bool
24d0: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b   autoIncrement);
24e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
24f0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 47 65 74  bstract void Get
2500: 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
2510: 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
2520: 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
2530: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
2540: 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f  lumn, out int so
2550: 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20  rtMode, out int 
2560: 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72  onError, out str
2570: 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
2580: 75 65 6e 63 65 29 3b 0d 0a 0d 0a 20 20 20 20 69  uence);....    i
2590: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
25a0: 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c   double GetDoubl
25b0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
25c0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
25d0: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
25e0: 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 33 32  l abstract Int32
25f0: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
2600: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2610: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
2620: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2630: 63 74 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36  ct Int64 GetInt6
2640: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
2650: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2660: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
2670: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
2680: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
2690: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
26a0: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
26b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
26c0: 63 74 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  ct long GetBytes
26d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
26e0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
26f0: 2c 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65  , int nDataoffse
2700: 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
2710: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
2720: 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20   nLength);..    
2730: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2740: 74 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28  t long GetChars(
2750: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2760: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
2770: 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74   int nDataoffset
2780: 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20  , char[] bDest, 
2790: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
27a0: 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69  nLength);..    i
27b0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
27c0: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
27d0: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
27e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
27f0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
2800: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62  ernal abstract b
2810: 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
2820: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2830: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a   int index);....
2840: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2850: 74 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74  tract void Creat
2860: 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e  eCollation(strin
2870: 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20  g strCollation, 
2880: 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20  SQLiteCollation 
2890: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  func, SQLiteColl
28a0: 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 3b 0d 0a  ation func16);..
28b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
28c0: 74 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74  tract void Creat
28d0: 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
28e0: 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
28f0: 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
2900: 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
2910: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
2920: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
2930: 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
2940: 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
2950: 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 69 6e  cfinal);..    in
2960: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2970: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
2980: 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65  e GetCollationSe
2990: 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e  quence(SQLiteFun
29a0: 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50  ction func, IntP
29b0: 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  tr context);..  
29c0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
29d0: 61 63 74 20 69 6e 74 20 43 6f 6e 74 65 78 74 43  act int ContextC
29e0: 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f  ollateCompare(Co
29f0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
2a00: 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20  num enc, IntPtr 
2a10: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
2a20: 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 3b 0d  s1, string s2);.
2a30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2a40: 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6e 74 65  stract int Conte
2a50: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
2a60: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
2a70: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
2a80: 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72  tr context, char
2a90: 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
2aa0: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
2ab0: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
2ac0: 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
2ad0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d  ntPtr context);.
2ae0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2af0: 73 74 72 61 63 74 20 49 6e 74 50 74 72 20 41 67  stract IntPtr Ag
2b00: 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49  gregateContext(I
2b10: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d  ntPtr context);.
2b20: 0a 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 6c 6f 6e 67 20 47 65  abstract long Ge
2b40: 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73  tParamValueBytes
2b50: 28 49 6e 74 50 74 72 20 70 74 72 2c 20 69 6e 74  (IntPtr ptr, int
2b60: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
2b70: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
2b80: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
2b90: 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  gth);..    inter
2ba0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75  nal abstract dou
2bb0: 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ble GetParamValu
2bc0: 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70  eDouble(IntPtr p
2bd0: 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  tr);..    intern
2be0: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
2bf0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
2c00: 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d  32(IntPtr ptr);.
2c10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2c20: 73 74 72 61 63 74 20 49 6e 74 36 34 20 47 65 74  stract Int64 Get
2c30: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
2c40: 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20  IntPtr ptr);..  
2c50: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2c60: 61 63 74 20 73 74 72 69 6e 67 20 47 65 74 50 61  act string GetPa
2c70: 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
2c80: 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69  Ptr ptr);..    i
2c90: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2ca0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
2cb0: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
2cc0: 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 0d 0a  IntPtr ptr);....
2cd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2ce0: 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72  tract void Retur
2cf0: 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e  nBlob(IntPtr con
2d00: 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c  text, byte[] val
2d10: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
2d20: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2d30: 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e   ReturnDouble(In
2d40: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f  tPtr context, do
2d50: 75 62 6c 65 20 76 61 6c 75 65 29 3b 0d 0a 20 20  uble value);..  
2d60: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2d70: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 45  act void ReturnE
2d80: 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
2d90: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
2da0: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2db0: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2dc0: 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50  ReturnInt32(IntP
2dd0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 33  tr context, Int3
2de0: 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  2 value);..    i
2df0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2e00: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
2e10: 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
2e20: 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d  , Int64 value);.
2e30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2e40: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
2e50: 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f  rnNull(IntPtr co
2e60: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74  ntext);..    int
2e70: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2e80: 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49  oid ReturnText(I
2e90: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
2ea0: 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 0d  tring value);...
2eb0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2ec0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
2ed0: 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
2ee0: 65 78 74 65 6e 65 64 20 72 65 73 75 6c 74 20 63  extened result c
2ef0: 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79  odes returned by
2f00: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f   SQLite..    ///
2f10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2f20: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2f30: 3d 22 62 4f 6e 4f 66 66 22 3e 74 72 75 65 20 74  ="bOnOff">true t
2f40: 6f 20 65 6e 61 62 6c 65 20 65 78 74 65 6e 64 65  o enable extende
2f50: 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 2c 20  d result codes, 
2f60: 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
2f70: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
2f80: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
2f90: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
2fa0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
2fb0: 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
2fc0: 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
2fd0: 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f  OnOff);..    ///
2fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ff0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
3000: 6e 75 6d 65 72 69 63 20 72 65 73 75 6c 74 20 63  numeric result c
3010: 6f 64 65 20 66 6f 72 20 74 68 65 20 6d 6f 73 74  ode for the most
3020: 20 72 65 63 65 6e 74 20 66 61 69 6c 65 64 20 53   recent failed S
3030: 51 4c 69 74 65 20 41 50 49 20 63 61 6c 6c 20 0d  QLite API call .
3040: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
3050: 74 65 64 20 77 69 74 68 20 74 68 65 20 64 61 74  ted with the dat
3060: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3070: 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  . ..    /// </su
3080: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3090: 3c 72 65 74 75 72 6e 73 3e 52 65 73 75 6c 74 20  <returns>Result 
30a0: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
30b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
30c0: 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
30d0: 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65  rCode ResultCode
30e0: 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ();..    /// <su
30f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3100: 52 65 74 75 72 6e 73 20 74 68 65 20 65 78 74 65  Returns the exte
3110: 6e 64 65 64 20 6e 75 6d 65 72 69 63 20 72 65 73  nded numeric res
3120: 75 6c 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65  ult code for the
3130: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69   most recent fai
3140: 6c 65 64 20 53 51 4c 69 74 65 20 41 50 49 20 63  led SQLite API c
3150: 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  all ..    /// as
3160: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
3170: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3180: 63 74 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f 2f 2f  ction. ..    ///
3190: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
31a0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 45 78   /// <returns>Ex
31b0: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
31c0: 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
31d0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
31e0: 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
31f0: 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75  ode ExtendedResu
3200: 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  ltCode();....   
3210: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3220: 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
3230: 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
3240: 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
3250: 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
3260: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3270: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3280: 72 61 6d 20 6e 61 6d 65 3d 22 69 45 72 72 43 6f  ram name="iErrCo
3290: 64 65 22 3e 45 72 72 6f 72 20 63 6f 64 65 20 74  de">Error code t
32a0: 6f 20 62 65 20 6c 6f 67 67 65 64 20 77 69 74 68  o be logged with
32b0: 20 74 68 65 20 6d 65 73 73 61 67 65 2e 3c 2f 70   the message.</p
32c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
32d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4d 65 73  param name="zMes
32e0: 73 61 67 65 22 3e 53 74 72 69 6e 67 20 74 6f 20  sage">String to 
32f0: 62 65 20 6c 6f 67 67 65 64 2e 20 20 55 6e 6c 69  be logged.  Unli
3300: 6b 65 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ke the SQLite sq
3310: 6c 69 74 65 33 5f 6c 6f 67 28 29 20 0d 0a 20 20  lite3_log() ..  
3320: 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2c    /// interface,
3330: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
3340: 70 72 65 2d 66 6f 72 6d 61 74 74 65 64 2e 20 20  pre-formatted.  
3350: 43 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 74  Consider using t
3360: 68 65 20 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 72  he ..    /// Str
3370: 69 6e 67 2e 46 6f 72 6d 61 74 28 29 20 66 75 6e  ing.Format() fun
3380: 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
3390: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
33a0: 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  ></returns>..   
33b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
33c0: 63 74 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61  ct void LogMessa
33d0: 67 65 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c  ge(int iErrCode,
33e0: 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
33f0: 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  );....#if INTERO
3400: 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74  P_CODEC..    int
3410: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
3420: 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28  oid SetPassword(
3430: 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42  byte[] passwordB
3440: 79 74 65 73 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ytes);..    inte
3450: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3460: 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72  id ChangePasswor
3470: 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73  d(byte[] newPass
3480: 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a 23 65 6e  wordBytes);..#en
3490: 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    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 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
34c0: 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
34d0: 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20  back func);..   
34e0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
34f0: 63 74 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  ct void SetCommi
3500: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
3510: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
3520: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3530: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65  abstract void Se
3540: 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
3550: 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
3560: 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69  ck func);..    i
3570: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3580: 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
3590: 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
35a0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
35b0: 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  c);..    interna
35c0: 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  l abstract SQLit
35d0: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
35e0: 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
35f0: 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
3600: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
3610: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3620: 20 43 68 65 63 6b 73 20 69 66 20 74 68 65 20 53   Checks if the S
3630: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
3640: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
3650: 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 63  ialized in the c
3660: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
3670: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3680: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
3690: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
36a0: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
36b0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
36c0: 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
36d0: 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20  tialized in the 
36e0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2c  current process,
36f0: 0d 0a 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 20 6f  ..    /// zero o
3700: 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
3710: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
3720: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3730: 72 61 63 74 20 62 6f 6f 6c 20 49 73 49 6e 69 74  ract bool IsInit
3740: 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 0d 0a 20 20  ialized();....  
3750: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
3760: 61 63 74 20 69 6e 74 20 47 65 74 43 75 72 73 6f  act int GetCurso
3770: 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65  rForTable(SQLite
3780: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3790: 69 6e 74 20 64 61 74 61 62 61 73 65 2c 20 69 6e  int database, in
37a0: 74 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 20 20  t rootPage);..  
37b0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
37c0: 61 63 74 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49  act long GetRowI
37d0: 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74  dForCursor(SQLit
37e0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
37f0: 20 69 6e 74 20 63 75 72 73 6f 72 29 3b 0d 0a 0d   int cursor);...
3800: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3810: 73 74 72 61 63 74 20 6f 62 6a 65 63 74 20 47 65  stract object Ge
3820: 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
3830: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
3840: 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
3850: 70 65 20 74 79 70 29 3b 0d 0a 0d 0a 20 20 20 20  pe typ);....    
3860: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3870: 74 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69  t bool AutoCommi
3880: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
3890: 67 65 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  get;..    }.... 
38a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
38b0: 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
38c0: 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c  Code FileControl
38d0: 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c  (string zDbName,
38e0: 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20   int op, IntPtr 
38f0: 70 41 72 67 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  pArg);....    //
3900: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3910: 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e   /// Creates a n
3920: 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70  ew SQLite backup
3930: 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e   object based on
3940: 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65   the provided de
3950: 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
3960: 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  // database conn
3970: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75  ection.  The sou
3980: 72 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  rce database con
3990: 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f  nection is the o
39a0: 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  ne..    /// asso
39b0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
39c0: 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f   object.  The so
39d0: 75 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61  urce and destina
39e0: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20  tion database.. 
39f0: 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
3a00: 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65  ns cannot be the
3a10: 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   same...    /// 
3a20: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3a30: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3a40: 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65  "destCnn">The de
3a50: 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
3a60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
3a70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3a80: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
3a90: 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69  tName">The desti
3aa0: 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
3ab0: 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
3ac0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3ad0: 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e  me="sourceName">
3ae0: 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
3af0: 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
3b00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3b10: 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72  rns>The newly cr
3b20: 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  eated backup obj
3b30: 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
3b40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3b50: 74 72 61 63 74 20 53 51 4c 69 74 65 42 61 63 6b  tract SQLiteBack
3b60: 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63  up InitializeBac
3b70: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
3b80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64  LiteConnection d
3b90: 65 73 74 43 6e 6e 2c 20 73 74 72 69 6e 67 20 64  estCnn, string d
3ba0: 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  estName,..      
3bb0: 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e    string sourceN
3bc0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  ame);....    ///
3bd0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3be0: 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
3bf0: 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
3c00: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
3c10: 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
3c20: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
3c30: 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
3c40: 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
3c50: 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
3c60: 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
3c70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3c80: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
3c90: 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
3ca0: 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
3cb0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
3cc0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
3cd0: 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
3ce0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
3cf0: 65 73 20 74 6f 20 63 6f 70 79 20 6f 72 20 6e 65  es to copy or ne
3d00: 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61  gative to copy a
3d10: 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67  ll remaining pag
3d20: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
3d30: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3d40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
3d50: 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74  y">..    /// Set
3d60: 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20   to true if the 
3d70: 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20  operation needs 
3d80: 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75  to be retried du
3d90: 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20  e to database.. 
3da0: 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69     /// locking i
3db0: 73 73 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssues...    /// 
3dc0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3dd0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
3de0: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65   /// True if the
3df0: 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65  re are more page
3e00: 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20  s to be copied, 
3e10: 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  false otherwise.
3e20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
3e30: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
3e40: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
3e50: 20 53 74 65 70 42 61 63 6b 75 70 28 53 51 4c 69   StepBackup(SQLi
3e60: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
3e70: 20 69 6e 74 20 6e 50 61 67 65 2c 20 6f 75 74 20   int nPage, out 
3e80: 62 6f 6f 6c 20 72 65 74 72 79 29 3b 0d 0a 0d 0a  bool retry);....
3e90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3ea0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
3eb0: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
3ec0: 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
3ed0: 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
3ee0: 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
3ef0: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
3f00: 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
3f10: 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
3f20: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
3f30: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
3f40: 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
3f50: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3f70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
3f80: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
3f90: 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
3fa0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
3fb0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
3fc0: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
3fd0: 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
3fe0: 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
3ff0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
4000: 73 74 72 61 63 74 20 69 6e 74 20 52 65 6d 61 69  stract int Remai
4010: 6e 69 6e 67 42 61 63 6b 75 70 28 53 51 4c 69 74  ningBackup(SQLit
4020: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 29 3b  eBackup backup);
4030: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
4040: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
4050: 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
4060: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
4070: 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
4080: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
4090: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
40a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
40b0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
40c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
40d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
40e0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
40f0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
4100: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
4110: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4120: 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20  turns>The total 
4130: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
4140: 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
4150: 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73  tabase.</returns
4160: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4170: 61 62 73 74 72 61 63 74 20 69 6e 74 20 50 61 67  abstract int Pag
4180: 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 53 51 4c  eCountBackup(SQL
4190: 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
41a0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
41b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
41c0: 20 44 65 73 74 72 6f 79 73 20 74 68 65 20 62 61   Destroys the ba
41d0: 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c  ckup object, rol
41e0: 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61  ling back any ba
41f0: 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62 65  ckup that may be
4200: 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f   in..    /// pro
4210: 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  gess...    /// <
4220: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
4230: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4240: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
4250: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73  up object to des
4260: 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  troy.</param>.. 
4270: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
4280: 72 61 63 74 20 76 6f 69 64 20 46 69 6e 69 73 68  ract void Finish
4290: 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63  Backup(SQLiteBac
42a0: 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a  kup backup);....
42b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
42c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4310: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
4320: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
4330: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 75 62 6c  embers..    publ
4340: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
4350: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4360: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
4370: 0d 0a 20 20 20 20 20 20 20 20 47 43 2e 53 75 70  ..        GC.Sup
4380: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
4390: 69 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  is);..    }..   
43a0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
43b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
43c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4410: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
4420: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
4430: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
4440: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
4450: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
4460: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
4470: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
4480: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b   throw */..    {
4490: 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
44a0: 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
44b0: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
44d0: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
44e0: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79  osedException(ty
44f0: 70 65 6f 66 28 53 51 4c 69 74 65 42 61 73 65 29  peof(SQLiteBase)
4500: 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  .Name);..#endif.
4510: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4580: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76  .    protected v
4590: 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70  irtual void Disp
45a0: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
45b0: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
45c0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
45d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
45e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20             //if 
45f0: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
4600: 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20           //{..  
4610: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4640: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
4650: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
4660: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
4670: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
4680: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
46c0: 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20    //}....       
46d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
46e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
4700: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
4710: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
4720: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
4730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4770: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
4780: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
4790: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
47a0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47d0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
4810: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
4820: 72 75 63 74 6f 72 0d 0a 20 20 20 20 7e 53 51 4c  ructor..    ~SQL
4830: 69 74 65 42 61 73 65 28 29 0d 0a 20 20 20 20 7b  iteBase()..    {
4840: 0d 0a 20 20 20 20 20 20 20 20 44 69 73 70 6f 73  ..        Dispos
4850: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d  e(false);..    }
4860: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
4870: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
4880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
48e0: 2f 20 54 68 65 73 65 20 73 74 61 74 69 63 73 20  / These statics 
48f0: 61 72 65 20 68 65 72 65 20 66 6f 72 20 6c 61 63  are here for lac
4900: 6b 20 6f 66 20 61 20 62 65 74 74 65 72 20 70 6c  k of a better pl
4910: 61 63 65 20 74 6f 20 70 75 74 20 74 68 65 6d 2e  ace to put them.
4920: 0d 0a 20 20 20 20 2f 2f 20 54 68 65 79 20 65 78  ..    // They ex
4930: 69 73 74 20 68 65 72 65 20 62 65 63 61 75 73 65  ist here because
4940: 20 74 68 65 79 20 61 72 65 20 63 61 6c 6c 65 64   they are called
4950: 20 64 75 72 69 6e 67 20 74 68 65 20 66 69 6e 61   during the fina
4960: 6c 69 7a 61 74 69 6f 6e 20 6f 66 0d 0a 20 20 20  lization of..   
4970: 20 2f 2f 20 61 20 53 51 4c 69 74 65 53 74 61 74   // a SQLiteStat
4980: 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 53 51 4c  ementHandle, SQL
4990: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
49a0: 64 6c 65 2c 20 61 6e 64 20 53 51 4c 69 74 65 46  dle, and SQLiteF
49b0: 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e  unctionCookieHan
49c0: 64 6c 65 2e 0d 0a 20 20 20 20 2f 2f 20 54 68 65  dle...    // The
49d0: 72 65 66 6f 72 65 20 74 68 65 73 65 20 66 75 6e  refore these fun
49e0: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 6f 20 62  ctions have to b
49f0: 65 20 73 74 61 74 69 63 2c 20 61 6e 64 20 68 61  e static, and ha
4a00: 76 65 20 74 6f 20 62 65 20 6c 6f 77 2d 6c 65 76  ve to be low-lev
4a10: 65 6c 2e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  el.....    /////
4a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4a80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
4a90: 20 73 74 72 69 6e 67 5b 5d 20 5f 65 72 72 6f 72   string[] _error
4aa0: 4d 65 73 73 61 67 65 73 20 3d 20 7b 0a 20 20 20  Messages = {.   
4ab0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4f       /* SQLITE_O
4ac0: 4b 20 20 20 20 20 20 20 20 20 20 2a 2f 20 22 6e  K          */ "n
4ad0: 6f 74 20 61 6e 20 65 72 72 6f 72 22 2c 0d 0a 20  ot an error",.. 
4ae0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
4af0: 5f 45 52 52 4f 52 20 20 20 20 20 20 20 2a 2f 20  _ERROR       */ 
4b00: 22 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  "SQL logic error
4b10: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
4b20: 62 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  base",..        
4b30: 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e  /* SQLITE_INTERN
4b40: 41 4c 20 20 20 20 2a 2f 20 22 69 6e 74 65 72 6e  AL    */ "intern
4b50: 61 6c 20 6c 6f 67 69 63 20 65 72 72 6f 72 22 2c  al logic error",
4b60: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
4b70: 49 54 45 5f 50 45 52 4d 20 20 20 20 20 20 20 20  ITE_PERM        
4b80: 2a 2f 20 22 61 63 63 65 73 73 20 70 65 72 6d 69  */ "access permi
4b90: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 2c 0d 0a  ssion denied",..
4ba0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
4bb0: 45 5f 41 42 4f 52 54 20 20 20 20 20 20 20 2a 2f  E_ABORT       */
4bc0: 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65   "callback reque
4bd0: 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74  sted query abort
4be0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
4bf0: 51 4c 49 54 45 5f 42 55 53 59 20 20 20 20 20 20  QLITE_BUSY      
4c00: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 69    */ "database i
4c10: 73 20 6c 6f 63 6b 65 64 22 2c 0d 0a 20 20 20 20  s locked",..    
4c20: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4c 4f      /* SQLITE_LO
4c30: 43 4b 45 44 20 20 20 20 20 20 2a 2f 20 22 64 61  CKED      */ "da
4c40: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
4c50: 6c 6f 63 6b 65 64 22 2c 0d 0a 20 20 20 20 20 20  locked",..      
4c60: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45    /* SQLITE_NOME
4c70: 4d 20 20 20 20 20 20 20 2a 2f 20 22 6f 75 74 20  M       */ "out 
4c80: 6f 66 20 6d 65 6d 6f 72 79 22 2c 0d 0a 20 20 20  of memory",..   
4c90: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52       /* SQLITE_R
4ca0: 45 41 44 4f 4e 4c 59 20 20 20 20 2a 2f 20 22 61  EADONLY    */ "a
4cb0: 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20  ttempt to write 
4cc0: 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62  a readonly datab
4cd0: 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ase",..        /
4ce0: 2a 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  * SQLITE_INTERRU
4cf0: 50 54 20 20 20 2a 2f 20 22 69 6e 74 65 72 72 75  PT   */ "interru
4d00: 70 74 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  pted",..        
4d10: 2f 2a 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 20  /* SQLITE_IOERR 
4d20: 20 20 20 20 20 20 2a 2f 20 22 64 69 73 6b 20 49        */ "disk I
4d30: 2f 4f 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20  /O error",..    
4d40: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43 4f      /* SQLITE_CO
4d50: 52 52 55 50 54 20 20 20 20 20 2a 2f 20 22 64 61  RRUPT     */ "da
4d60: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
4d70: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 2c  e is malformed",
4d80: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
4d90: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 20 20 20  ITE_NOTFOUND    
4da0: 2a 2f 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70 65 72  */ "unknown oper
4db0: 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ation",..       
4dc0: 20 2f 2a 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   /* SQLITE_FULL 
4dd0: 20 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62         */ "datab
4de0: 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66  ase or disk is f
4df0: 75 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ull",..        /
4e00: 2a 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  * SQLITE_CANTOPE
4e10: 4e 20 20 20 20 2a 2f 20 22 75 6e 61 62 6c 65 20  N    */ "unable 
4e20: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
4e30: 20 66 69 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20   file",..       
4e40: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f   /* SQLITE_PROTO
4e50: 43 4f 4c 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69  COL    */ "locki
4e60: 6e 67 20 70 72 6f 74 6f 63 6f 6c 22 2c 0d 0a 20  ng protocol",.. 
4e70: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
4e80: 5f 45 4d 50 54 59 20 20 20 20 20 20 20 2a 2f 20  _EMPTY       */ 
4e90: 22 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20  "table contains 
4ea0: 6e 6f 20 64 61 74 61 22 2c 0d 0a 20 20 20 20 20  no data",..     
4eb0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 53 43 48     /* SQLITE_SCH
4ec0: 45 4d 41 20 20 20 20 20 20 2a 2f 20 22 64 61 74  EMA      */ "dat
4ed0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
4ee0: 20 63 68 61 6e 67 65 64 22 2c 0d 0a 20 20 20 20   changed",..    
4ef0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 54 4f      /* SQLITE_TO
4f00: 4f 42 49 47 20 20 20 20 20 20 2a 2f 20 22 73 74  OBIG      */ "st
4f10: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
4f20: 20 62 69 67 22 2c 0d 0a 20 20 20 20 20 20 20 20   big",..        
4f30: 2f 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  /* SQLITE_CONSTR
4f40: 41 49 4e 54 20 20 2a 2f 20 22 63 6f 6e 73 74 72  AINT  */ "constr
4f50: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 0d 0a 20  aint failed",.. 
4f60: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
4f70: 5f 4d 49 53 4d 41 54 43 48 20 20 20 20 2a 2f 20  _MISMATCH    */ 
4f80: 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  "datatype mismat
4f90: 63 68 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  ch",..        /*
4fa0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20   SQLITE_MISUSE  
4fb0: 20 20 20 20 2a 2f 20 22 6c 69 62 72 61 72 79 20      */ "library 
4fc0: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
4fd0: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 2c  ut of sequence",
4fe0: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
4ff0: 49 54 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 20  ITE_NOLFS       
5000: 2a 2f 20 22 6c 61 72 67 65 20 66 69 6c 65 20 73  */ "large file s
5010: 75 70 70 6f 72 74 20 69 73 20 64 69 73 61 62 6c  upport is disabl
5020: 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  ed",..        /*
5030: 20 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20 20   SQLITE_AUTH    
5040: 20 20 20 20 2a 2f 20 22 61 75 74 68 6f 72 69 7a      */ "authoriz
5050: 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 2c 0d 0a  ation denied",..
5060: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
5070: 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 20 2a 2f  E_FORMAT      */
5080: 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61   "auxiliary data
5090: 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f  base format erro
50a0: 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  r",..        /* 
50b0: 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20 20 20  SQLITE_RANGE    
50c0: 20 20 20 2a 2f 20 22 62 69 6e 64 20 6f 72 20 63     */ "bind or c
50d0: 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20  olumn index out 
50e0: 6f 66 20 72 61 6e 67 65 22 2c 0d 0a 20 20 20 20  of range",..    
50f0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f      /* SQLITE_NO
5100: 54 41 44 42 20 20 20 20 20 20 2a 2f 20 22 66 69  TADB      */ "fi
5110: 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20  le is encrypted 
5120: 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  or is not a data
5130: 62 61 73 65 22 0a 20 20 20 20 7d 3b 0a 0d 0a 20  base".    };... 
5140: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
51b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
51c0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 72 72   Returns the err
51d0: 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74  or message for t
51e0: 68 65 20 73 70 65 63 69 66 69 65 64 20 53 51 4c  he specified SQL
51f0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
5200: 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  using..    /// t
5210: 68 65 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74  he internal stat
5220: 69 63 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 2e  ic lookup table.
5230: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5240: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
5250: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54  aram name="rc">T
5260: 68 65 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  he SQLite return
5270: 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   code.</param>..
5280: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5290: 3e 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61  >The error messa
52a0: 67 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74  ge or null if it
52b0: 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
52c0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
52d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
52e0: 73 74 72 69 6e 67 20 46 61 6c 6c 62 61 63 6b 47  string FallbackG
52f0: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
5300: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
5310: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5320: 20 20 69 66 20 28 5f 65 72 72 6f 72 4d 65 73 73    if (_errorMess
5330: 61 67 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ages == null).. 
5340: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5350: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
5360: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 28     int index = (
5370: 69 6e 74 29 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  int)rc;....     
5380: 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3c 20     if ((index < 
5390: 30 29 20 7c 7c 20 28 69 6e 64 65 78 20 3e 3d 20  0) || (index >= 
53a0: 5f 65 72 72 6f 72 4d 65 73 73 61 67 65 73 2e 4c  _errorMessages.L
53b0: 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20 20 20  ength))..       
53c0: 20 20 20 20 20 69 6e 64 65 78 20 3d 20 28 69 6e       index = (in
53d0: 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t)SQLiteErrorCod
53e0: 65 2e 45 72 72 6f 72 3b 20 2f 2a 20 4d 61 6b 65  e.Error; /* Make
53f0: 20 69 6e 74 6f 20 67 65 6e 65 72 69 63 20 65 72   into generic er
5400: 72 6f 72 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  ror. */....     
5410: 20 20 20 72 65 74 75 72 6e 20 5f 65 72 72 6f 72     return _error
5420: 4d 65 73 73 61 67 65 73 5b 69 6e 64 65 78 5d 3b  Messages[index];
5430: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5440: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5450: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
5460: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   error message f
5470: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
5480: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
5490: 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f  ode using..    /
54a0: 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  // the sqlite3_e
54b0: 72 72 73 74 72 28 29 20 66 75 6e 63 74 69 6f 6e  rrstr() function
54c0: 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63 6b 20 74  , falling back t
54d0: 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 6c  o the internal l
54e0: 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f 20 74  ookup..    /// t
54f0: 61 62 6c 65 20 69 66 20 6e 65 63 65 73 73 61 72  able if necessar
5500: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
5510: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5520: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22  <param name="rc"
5530: 3e 54 68 65 20 53 51 4c 69 74 65 20 72 65 74 75  >The SQLite retu
5540: 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e  rn code.</param>
5550: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
5560: 6e 73 3e 54 68 65 20 65 72 72 6f 72 20 6d 65 73  ns>The error mes
5570: 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20  sage or null if 
5580: 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  it cannot be fou
5590: 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  nd.</returns>.. 
55a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
55b0: 69 63 20 73 74 72 69 6e 67 20 47 65 74 45 72 72  ic string GetErr
55c0: 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74 65 45  orString(SQLiteE
55d0: 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a 20 20  rrorCode rc)..  
55e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
55f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5600: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
5610: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
5620: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5630: 33 5f 65 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d  3_errstr(rc);...
5640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5650: 28 70 74 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  (ptr != IntPtr.Z
5660: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
5670: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
5680: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5690: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
56a0: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73       return Mars
56b0: 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67 41  hal.PtrToStringA
56c0: 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  nsi(ptr);..#else
56d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
56e0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
56f0: 74 72 69 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d  tring(ptr, -1);.
5700: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5720: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
5730: 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46   (EntryPointNotF
5740: 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a  oundException)..
5750: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5760: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
5770: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
5780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
5790: 72 6e 20 46 61 6c 6c 62 61 63 6b 47 65 74 45 72  rn FallbackGetEr
57a0: 72 6f 72 53 74 72 69 6e 67 28 72 63 29 3b 0d 0a  rorString(rc);..
57b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
57c0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
57d0: 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72  ing GetLastError
57e0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
57f0: 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74  nHandle hdl, Int
5800: 50 74 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a  Ptr db)..    {..
5810: 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64 6c          if ((hdl
5820: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62   == null) || (db
5830: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
5840: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
5850: 65 74 75 72 6e 20 22 6e 75 6c 6c 20 63 6f 6e 6e  eturn "null conn
5860: 65 63 74 69 6f 6e 20 6f 72 20 64 61 74 61 62 61  ection or databa
5870: 73 65 20 68 61 6e 64 6c 65 22 3b 0d 0a 0d 0a 20  se handle";.... 
5880: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c         lock (hdl
5890: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
58a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68 64            if (hd
58b0: 6c 2e 49 73 43 6c 6f 73 65 64 20 7c 7c 20 68 64  l.IsClosed || hd
58c0: 6c 2e 49 73 49 6e 76 61 6c 69 64 29 0d 0a 20 20  l.IsInvalid)..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
58e0: 74 75 72 6e 20 22 63 6c 6f 73 65 64 20 6f 72 20  turn "closed or 
58f0: 69 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63 74 69  invalid connecti
5900: 6f 6e 20 68 61 6e 64 6c 65 22 3b 0d 0a 0d 0a 23  on handle";....#
5910: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
5920: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
5930: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
5940: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
5950: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
5960: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5970: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e  qlite3_errmsg_in
5980: 74 65 72 6f 70 28 64 62 2c 20 6f 75 74 20 6c 65  terop(db, out le
5990: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
59a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
59b0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
59c0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
59d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
59e0: 72 6d 73 67 28 64 62 29 2c 20 2d 31 29 3b 0d 0a  rmsg(db), -1);..
59f0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5a00: 7d 0d 0a 0d 0a 23 70 72 61 67 6d 61 20 77 61 72  }....#pragma war
5a10: 6e 69 6e 67 20 64 69 73 61 62 6c 65 20 31 36 32  ning disable 162
5a20: 0d 0a 20 20 20 20 20 20 20 20 47 43 2e 4b 65 65  ..        GC.Kee
5a30: 70 41 6c 69 76 65 28 68 64 6c 29 3b 20 2f 2a 20  pAlive(hdl); /* 
5a40: 4e 4f 54 45 3a 20 55 6e 72 65 61 63 68 61 62 6c  NOTE: Unreachabl
5a50: 65 20 63 6f 64 65 2e 20 2a 2f 0d 0a 23 70 72 61  e code. */..#pra
5a60: 67 6d 61 20 77 61 72 6e 69 6e 67 20 72 65 73 74  gma warning rest
5a70: 6f 72 65 20 31 36 32 0d 0a 20 20 20 20 7d 0d 0a  ore 162..    }..
5a80: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
5a90: 74 61 74 69 63 20 76 6f 69 64 20 46 69 6e 69 73  tatic void Finis
5aa0: 68 42 61 63 6b 75 70 28 53 51 4c 69 74 65 43 6f  hBackup(SQLiteCo
5ab0: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68  nnectionHandle h
5ac0: 64 6c 2c 20 49 6e 74 50 74 72 20 62 61 63 6b 75  dl, IntPtr backu
5ad0: 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
5ae0: 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e     if ((hdl == n
5af0: 75 6c 6c 29 20 7c 7c 20 28 62 61 63 6b 75 70 20  ull) || (backup 
5b00: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  == IntPtr.Zero))
5b10: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
5b20: 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 20 20    lock (hdl)..  
5b30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b40: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5b50: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5b60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5b70: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
5b80: 73 68 28 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20  sh(backup);..   
5b90: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
5ba0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5bb0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
5bc0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
5bd0: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
5be0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5bf0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
5c00: 69 63 20 76 6f 69 64 20 46 69 6e 61 6c 69 7a 65  ic void Finalize
5c10: 53 74 61 74 65 6d 65 6e 74 28 53 51 4c 69 74 65  Statement(SQLite
5c20: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
5c30: 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 73 74 6d   hdl, IntPtr stm
5c40: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
5c50: 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e     if ((hdl == n
5c60: 75 6c 6c 29 20 7c 7c 20 28 73 74 6d 74 20 3d 3d  ull) || (stmt ==
5c70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72   IntPtr.Zero)) r
5c80: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
5c90: 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 20 20 20 20  lock (hdl)..    
5ca0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
5cb0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
5cc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
5cd0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5ce0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5cf0: 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
5d00: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b  e_interop(stmt);
5d10: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5d20: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5d30: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5d40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5d50: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74  ite3_finalize(st
5d60: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  mt);..#endif..  
5d70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
5d80: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5d90: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5da0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5db0: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
5dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5dd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5de0: 74 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 43 6f  tic void CloseCo
5df0: 6e 6e 65 63 74 69 6f 6e 28 53 51 4c 69 74 65 43  nnection(SQLiteC
5e00: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
5e10: 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d  hdl, IntPtr db).
5e20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5e30: 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c  if ((hdl == null
5e40: 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50  ) || (db == IntP
5e50: 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e  tr.Zero)) return
5e60: 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  ;..        lock 
5e70: 28 68 64 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  (hdl)..        {
5e80: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
5e90: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
5ea0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5eb0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
5ec0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5ed0: 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f  te3_close_intero
5ee0: 70 28 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  p(db);..#else.. 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 74             Reset
5f00: 43 6f 6e 6e 65 63 74 69 6f 6e 28 68 64 6c 2c 20  Connection(hdl, 
5f10: 64 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db);....        
5f20: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5f30: 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode n;....      
5f40: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
5f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5f60: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
5f70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5f80: 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  s.sqlite3_close_
5f90: 76 32 28 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  v2(db);..       
5fa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5fb0: 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79      catch (Entry
5fc0: 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63  PointNotFoundExc
5fd0: 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  eption)..       
5fe0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ff0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
6000: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6010: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
6020: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6030: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
6040: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
6050: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6060: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
6070: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6080: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68 64   GetLastError(hd
6090: 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20 20  l, db));..      
60a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
60b0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
60c0: 63 20 76 6f 69 64 20 52 65 73 65 74 43 6f 6e 6e  c void ResetConn
60d0: 65 63 74 69 6f 6e 28 53 51 4c 69 74 65 43 6f 6e  ection(SQLiteCon
60e0: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64  nectionHandle hd
60f0: 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d 0a 20  l, IntPtr db).. 
6100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
6110: 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20   ((hdl == null) 
6120: 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72  || (db == IntPtr
6130: 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 3b 0d  .Zero)) return;.
6140: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 64 6c  .        if (hdl
6150: 2e 49 73 43 6c 6f 73 65 64 20 7c 7c 20 68 64 6c  .IsClosed || hdl
6160: 2e 49 73 49 6e 76 61 6c 69 64 29 20 72 65 74 75  .IsInvalid) retu
6170: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63  rn;..        loc
6180: 6b 20 28 68 64 6c 29 0d 0a 20 20 20 20 20 20 20  k (hdl)..       
6190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
61a0: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
61b0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
61c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
61d0: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
61e0: 20 20 20 20 20 20 20 20 64 6f 0d 0a 20 20 20 20          do..    
61f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6200: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20             stmt 
6210: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6220: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6e 65  thods.sqlite3_ne
6230: 78 74 5f 73 74 6d 74 28 64 62 2c 20 73 74 6d 74  xt_stmt(db, stmt
6240: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6250: 20 20 20 20 69 66 20 28 73 74 6d 74 20 21 3d 20      if (stmt != 
6260: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6280: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
6290: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
62a0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
62b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
62c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
62d0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d  _interop(stmt);.
62e0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
6300: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6310: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
6320: 74 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  t(stmt);..#endif
6330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6340: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6350: 20 7d 20 77 68 69 6c 65 20 28 73 74 6d 74 20 21   } while (stmt !
6360: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  = IntPtr.Zero);.
6370: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
6380: 66 20 28 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28  f (IsAutocommit(
6390: 68 64 6c 2c 20 64 62 29 20 3d 3d 20 66 61 6c 73  hdl, db) == fals
63a0: 65 29 20 2f 2f 20 61 20 74 72 61 6e 73 61 63 74  e) // a transact
63b0: 69 6f 6e 20 69 73 20 70 65 6e 64 69 6e 67 20 6f  ion is pending o
63c0: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
63d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
63e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
63f0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6400: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6410: 5f 65 78 65 63 28 64 62 2c 20 54 6f 55 54 46 38  _exec(db, ToUTF8
6420: 28 22 52 4f 4c 4c 42 41 43 4b 22 29 2c 20 49 6e  ("ROLLBACK"), In
6430: 74 50 74 72 2e 5a 65 72 6f 2c 20 49 6e 74 50 74  tPtr.Zero, IntPt
6440: 72 2e 5a 65 72 6f 2c 20 6f 75 74 20 73 74 6d 74  r.Zero, out stmt
6450: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6460: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6470: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6480: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6490: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
64a0: 74 4c 61 73 74 45 72 72 6f 72 28 68 64 6c 2c 20  tLastError(hdl, 
64b0: 64 62 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  db));..         
64c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
64d0: 0a 20 20 20 20 20 20 20 20 47 43 2e 4b 65 65 70  .        GC.Keep
64e0: 41 6c 69 76 65 28 68 64 6c 29 3b 0d 0a 20 20 20  Alive(hdl);..   
64f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6500: 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  al static bool I
6510: 73 41 75 74 6f 63 6f 6d 6d 69 74 28 53 51 4c 69  sAutocommit(SQLi
6520: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
6530: 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64  le hdl, IntPtr d
6540: 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  b)..    {..     
6550: 20 69 66 20 28 64 62 20 3d 3d 20 49 6e 74 50 74   if (db == IntPt
6560: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 66  r.Zero) return f
6570: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 69 66 20  alse;..      if 
6580: 28 68 64 6c 2e 49 73 43 6c 6f 73 65 64 20 7c 7c  (hdl.IsClosed ||
6590: 20 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64 29 20   hdl.IsInvalid) 
65a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
65b0: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d       lock (hdl).
65c0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
65d0: 20 20 20 20 72 65 74 75 72 6e 20 28 55 6e 73 61      return (Unsa
65e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
65f0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
6600: 63 6f 6d 6d 69 74 28 64 62 29 20 3d 3d 20 31 29  commit(db) == 1)
6610: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 70 72 61  ;..      }..#pra
6620: 67 6d 61 20 77 61 72 6e 69 6e 67 20 64 69 73 61  gma warning disa
6630: 62 6c 65 20 31 36 32 0d 0a 20 20 20 20 20 20 47  ble 162..      G
6640: 43 2e 4b 65 65 70 41 6c 69 76 65 28 68 64 6c 29  C.KeepAlive(hdl)
6650: 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e 72 65 61  ; /* NOTE: Unrea
6660: 63 68 61 62 6c 65 20 63 6f 64 65 2e 20 2a 2f 0d  chable code. */.
6670: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 69 6e 67  .#pragma warning
6680: 20 72 65 73 74 6f 72 65 20 31 36 32 0d 0a 20 20   restore 162..  
6690: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 6e    }..  }....  in
66a0: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
66b0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
66c0: 74 65 6e 73 69 6f 6e 73 0d 0a 20 20 7b 0d 0a 20  tensions..  {.. 
66d0: 20 20 20 76 6f 69 64 20 42 75 69 6c 64 54 65 6d     void BuildTem
66e0: 70 53 63 68 65 6d 61 28 53 51 4c 69 74 65 43 6f  pSchema(SQLiteCo
66f0: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 29 3b 0d 0a  nnection cnn);..
6700: 20 20 7d 0d 0a 0d 0a 20 20 5b 46 6c 61 67 73 5d    }....  [Flags]
6710: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75  ..  internal enu
6720: 6d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  m SQLiteOpenFlag
6730: 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20  sEnum..  {..    
6740: 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 20 20 20 20 52  None = 0,..    R
6750: 65 61 64 4f 6e 6c 79 20 3d 20 30 78 30 31 2c 0d  eadOnly = 0x01,.
6760: 0a 20 20 20 20 52 65 61 64 57 72 69 74 65 20 3d  .    ReadWrite =
6770: 20 30 78 30 32 2c 0d 0a 20 20 20 20 43 72 65 61   0x02,..    Crea
6780: 74 65 20 3d 20 30 78 30 34 2c 0d 0a 20 20 20 20  te = 0x04,..    
6790: 55 72 69 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  Uri = 0x40,..   
67a0: 20 53 68 61 72 65 64 43 61 63 68 65 20 3d 20 30   SharedCache = 0
67b0: 78 30 31 30 30 30 30 30 30 2c 0d 0a 20 20 20 20  x01000000,..    
67c0: 44 65 66 61 75 6c 74 20 3d 20 30 78 30 36 2c 0d  Default = 0x06,.
67d0: 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73  .  }....  /// <s
67e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54  ummary>..  /// T
67f0: 68 65 20 65 78 74 72 61 20 62 65 68 61 76 69 6f  he extra behavio
6800: 72 61 6c 20 66 6c 61 67 73 20 74 68 61 74 20 63  ral flags that c
6810: 61 6e 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f  an be applied to
6820: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a   a connection...
6830: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6840: 0d 0a 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20  ..  [Flags()].. 
6850: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
6860: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6870: 67 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f  gs..  {..      /
6880: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6890: 20 20 20 20 2f 2f 2f 20 4e 6f 20 65 78 74 72 61      /// No extra
68a0: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 2f   flags...      /
68b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
68c0: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
68d0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
68e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
68f0: 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e  // Enable loggin
6900: 67 20 6f 66 20 61 6c 6c 20 53 51 4c 20 73 74 61  g of all SQL sta
6910: 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 20 70 72  tements to be pr
6920: 65 70 61 72 65 64 2e 0d 0a 20 20 20 20 20 20 2f  epared...      /
6930: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6940: 20 20 20 20 20 4c 6f 67 50 72 65 70 61 72 65 20       LogPrepare 
6950: 3d 20 30 78 31 2c 0d 0a 0d 0a 20 20 20 20 20 20  = 0x1,....      
6960: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6970: 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20       /// Enable 
6980: 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20 62  logging of all b
6990: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  ound parameter t
69a0: 79 70 65 73 20 61 6e 64 20 72 61 77 20 76 61 6c  ypes and raw val
69b0: 75 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ues...      /// 
69c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
69d0: 20 20 4c 6f 67 50 72 65 42 69 6e 64 20 3d 20 30    LogPreBind = 0
69e0: 78 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  x2,....      ///
69f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6a00: 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67    /// Enable log
6a10: 67 69 6e 67 20 6f 66 20 61 6c 6c 20 62 6f 75 6e  ging of all boun
6a20: 64 20 70 61 72 61 6d 65 74 65 72 20 73 74 72 6f  d parameter stro
6a30: 6e 67 6c 79 20 74 79 70 65 64 20 76 61 6c 75 65  ngly typed value
6a40: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
6a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6a60: 4c 6f 67 42 69 6e 64 20 3d 20 30 78 34 2c 0d 0a  LogBind = 0x4,..
6a70: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
6a80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
6a90: 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20   Enable logging 
6aa0: 6f 66 20 61 6c 6c 20 65 78 63 65 70 74 69 6f 6e  of all exception
6ab0: 73 20 63 61 75 67 68 74 20 66 72 6f 6d 20 75 73  s caught from us
6ac0: 65 72 2d 70 72 6f 76 69 64 65 64 0d 0a 20 20 20  er-provided..   
6ad0: 20 20 20 2f 2f 2f 20 6d 61 6e 61 67 65 64 20 63     /// managed c
6ae0: 6f 64 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ode called from 
6af0: 6e 61 74 69 76 65 20 63 6f 64 65 20 76 69 61 20  native code via 
6b00: 64 65 6c 65 67 61 74 65 73 2e 0d 0a 20 20 20 20  delegates...    
6b10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6b20: 0d 0a 20 20 20 20 20 20 4c 6f 67 43 61 6c 6c 62  ..      LogCallb
6b30: 61 63 6b 45 78 63 65 70 74 69 6f 6e 20 3d 20 30  ackException = 0
6b40: 78 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  x8,....      ///
6b50: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6b60: 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67    /// Enable log
6b70: 67 69 6e 67 20 6f 66 20 62 61 63 6b 75 70 20 41  ging of backup A
6b80: 50 49 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20  PI errors...    
6b90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6ba0: 0d 0a 20 20 20 20 20 20 4c 6f 67 42 61 63 6b 75  ..      LogBacku
6bb0: 70 20 3d 20 30 78 31 30 2c 0d 0a 0d 0a 20 20 20  p = 0x10,....   
6bc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6bd0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
6be0: 6c 65 20 61 6c 6c 20 6c 6f 67 67 69 6e 67 2e 0d  le all logging..
6bf0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
6c00: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67  mary>..      Log
6c10: 41 6c 6c 20 3d 20 4c 6f 67 50 72 65 70 61 72 65  All = LogPrepare
6c20: 20 7c 20 4c 6f 67 50 72 65 42 69 6e 64 20 7c 20   | LogPreBind | 
6c30: 4c 6f 67 42 69 6e 64 20 7c 0d 0a 20 20 20 20 20  LogBind |..     
6c40: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 43 61 6c            LogCal
6c50: 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 20 7c  lbackException |
6c60: 20 4c 6f 67 42 61 63 6b 75 70 2c 0d 0a 0d 0a 20   LogBackup,.... 
6c70: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6c80: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
6c90: 65 20 64 65 66 61 75 6c 74 20 65 78 74 72 61 20  e default extra 
6ca0: 66 6c 61 67 73 20 66 6f 72 20 6e 65 77 20 63 6f  flags for new co
6cb0: 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  nnections...    
6cc0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6cd0: 0d 0a 20 20 20 20 20 20 44 65 66 61 75 6c 74 20  ..      Default 
6ce0: 3d 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63  = LogCallbackExc
6cf0: 65 70 74 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20  eption..  }.... 
6d00: 20 2f 2f 20 54 68 65 73 65 20 61 72 65 20 74 68   // These are th
6d10: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 20 74 68 65  e options to the
6d20: 20 69 6e 74 65 72 6e 61 6c 20 73 71 6c 69 74 65   internal sqlite
6d30: 33 5f 63 6f 6e 66 69 67 20 63 61 6c 6c 2e 0d 0a  3_config call...
6d40: 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20    internal enum 
6d50: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
6d60: 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 53 51  num..  {..    SQ
6d70: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45  LITE_CONFIG_NONE
6d80: 20 3d 20 30 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20   = 0, // nil .. 
6d90: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
6da0: 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 20 3d 20  _SINGLETHREAD = 
6db0: 31 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20  1, // nil ..    
6dc0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
6dd0: 4c 54 49 54 48 52 45 41 44 20 3d 20 32 2c 20 2f  LTITHREAD = 2, /
6de0: 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49  / nil ..    SQLI
6df0: 54 45 5f 43 4f 4e 46 49 47 5f 53 45 52 49 41 4c  TE_CONFIG_SERIAL
6e00: 49 5a 45 44 20 3d 20 33 2c 20 2f 2f 20 6e 69 6c  IZED = 3, // nil
6e10: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
6e20: 4e 46 49 47 5f 4d 41 4c 4c 4f 43 20 3d 20 34 2c  NFIG_MALLOC = 4,
6e30: 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f   // sqlite3_mem_
6e40: 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53  methods* ..    S
6e50: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54  QLITE_CONFIG_GET
6e60: 4d 41 4c 4c 4f 43 20 3d 20 35 2c 20 2f 2f 20 73  MALLOC = 5, // s
6e70: 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
6e80: 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  ds* ..    SQLITE
6e90: 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54 43 48 20  _CONFIG_SCRATCH 
6ea0: 3d 20 36 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20 69  = 6, // void*, i
6eb0: 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 20 0d 0a 20  nt sz, int N .. 
6ec0: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
6ed0: 5f 50 41 47 45 43 41 43 48 45 20 3d 20 37 2c 20  _PAGECACHE = 7, 
6ee0: 2f 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a  // void*, int sz
6ef0: 2c 20 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51  , int N ..    SQ
6f00: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50  LITE_CONFIG_HEAP
6f10: 20 3d 20 38 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20   = 8, // void*, 
6f20: 69 6e 74 20 6e 42 79 74 65 2c 20 69 6e 74 20 6d  int nByte, int m
6f30: 69 6e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  in ..    SQLITE_
6f40: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
6f50: 20 3d 20 39 2c 20 2f 2f 20 62 6f 6f 6c 65 61 6e   = 9, // boolean
6f60: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
6f70: 4e 46 49 47 5f 4d 55 54 45 58 20 3d 20 31 30 2c  NFIG_MUTEX = 10,
6f80: 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   // sqlite3_mute
6f90: 78 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20  x_methods* ..   
6fa0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47   SQLITE_CONFIG_G
6fb0: 45 54 4d 55 54 45 58 20 3d 20 31 31 2c 20 2f 2f  ETMUTEX = 11, //
6fc0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
6fd0: 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 2f 2f  ethods* ..    //
6fe0: 20 70 72 65 76 69 6f 75 73 6c 79 20 53 51 4c 49   previously SQLI
6ff0: 54 45 5f 43 4f 4e 46 49 47 5f 43 48 55 4e 4b 41  TE_CONFIG_CHUNKA
7000: 4c 4c 4f 43 20 31 32 20 77 68 69 63 68 20 69 73  LLOC 12 which is
7010: 20 6e 6f 77 20 75 6e 75 73 65 64 0d 0a 20 20 20   now unused..   
7020: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c   SQLITE_CONFIG_L
7030: 4f 4f 4b 41 53 49 44 45 20 3d 20 31 33 2c 20 2f  OOKASIDE = 13, /
7040: 2f 20 69 6e 74 20 69 6e 74 20 0d 0a 20 20 20 20  / int int ..    
7050: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43  SQLITE_CONFIG_PC
7060: 41 43 48 45 20 3d 20 31 34 2c 20 2f 2f 20 73 71  ACHE = 14, // sq
7070: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
7080: 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49  hods* ..    SQLI
7090: 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41  TE_CONFIG_GETPCA
70a0: 43 48 45 20 3d 20 31 35 2c 20 2f 2f 20 73 71 6c  CHE = 15, // sql
70b0: 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
70c0: 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54  ods* ..    SQLIT
70d0: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 20 3d 20 31  E_CONFIG_LOG = 1
70e0: 36 2c 20 2f 2f 20 78 46 75 6e 63 2c 20 76 6f 69  6, // xFunc, voi
70f0: 64 2a 20 0d 0a 20 20 7d 0d 0a 0d 0a 7d 0d 0a     d* ..  }....}..