System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 94b5eadf00ee8ec7977599c62806d04396d764c9:


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 61 6e 20 69 6e 74 65   Returns an inte
0440: 67 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ger representing
0450: 20 74 68 65 20 61 63 74 69 76 65 20 76 65 72 73   the active vers
0460: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 0d 0a 20  ion of SQLite.. 
0470: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0480: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0490: 61 62 73 74 72 61 63 74 20 69 6e 74 20 56 65 72  abstract int Ver
04a0: 73 69 6f 6e 4e 75 6d 62 65 72 20 7b 20 67 65 74  sionNumber { get
04b0: 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ; }..    /// <su
04c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
04d0: 52 65 74 75 72 6e 73 20 74 68 65 20 72 6f 77 69  Returns the rowi
04e0: 64 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  d of the most re
04f0: 63 65 6e 74 20 73 75 63 63 65 73 73 66 75 6c 20  cent successful 
0500: 49 4e 53 45 52 54 20 69 6e 74 6f 20 74 68 65 20  INSERT into the 
0510: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 74 68  database from th
0520: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  is connection...
0530: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0540: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0550: 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 4c   abstract long L
0560: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 20 7b  astInsertRowId {
0570: 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f   get; }..    ///
0580: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0590: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
05a0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
05b0: 73 20 74 68 65 20 6c 61 73 74 20 65 78 65 63 75  s the last execu
05c0: 74 69 6e 67 20 69 6e 73 65 72 74 2f 75 70 64 61  ting insert/upda
05d0: 74 65 20 63 61 75 73 65 64 2e 0d 0a 20 20 20 20  te caused...    
05e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
05f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0600: 74 72 61 63 74 20 69 6e 74 20 43 68 61 6e 67 65  tract int Change
0610: 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20  s { get; }..    
0620: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0630: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
0640: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d  he amount of mem
0650: 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20 63  ory (in bytes) c
0660: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
0670: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
0680: 72 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 69  re library.  Thi
0690: 73 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20  s is not really 
06a0: 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  a per-connection
06b0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2c  ..    /// value,
06c0: 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f   it is global to
06d0: 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20   the process... 
06e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
06f0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0700: 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 4d 65  abstract long Me
0710: 6d 6f 72 79 55 73 65 64 20 7b 20 67 65 74 3b 20  moryUsed { get; 
0720: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0730: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
0740: 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  turns the maximu
0750: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f  m amount of memo
0760: 72 79 20 28 69 6e 20 62 79 74 65 73 29 20 75 73  ry (in bytes) us
0770: 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  ed by the SQLite
0780: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 73 69   core library si
0790: 6e 63 65 20 74 68 65 20 68 69 67 68 2d 77 61 74  nce the high-wat
07a0: 65 72 20 6d 61 72 6b 20 77 61 73 20 6c 61 73 74  er mark was last
07b0: 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f   reset...    ///
07c0: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 72 65 61   This is not rea
07d0: 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63  lly a per-connec
07e0: 74 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74 20 69  tion value, it i
07f0: 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
0800: 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
0810: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0820: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
0830: 61 63 74 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48  act long MemoryH
0840: 69 67 68 77 61 74 65 72 20 7b 20 67 65 74 3b 20  ighwater { get; 
0850: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0860: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65  ary>..    /// Se
0870: 74 73 20 74 68 65 20 73 74 61 74 75 73 20 6f 66  ts the status of
0880: 20 74 68 65 20 6d 65 6d 6f 72 79 20 75 73 61 67   the memory usag
0890: 65 20 74 72 61 63 6b 69 6e 67 20 73 75 62 73 79  e tracking subsy
08a0: 73 74 65 6d 20 69 6e 20 74 68 65 20 53 51 4c 69  stem in the SQLi
08b0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
08c0: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68    By default, th
08d0: 69 73 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a  is is enabled...
08e0: 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 69 73 20      /// If this 
08f0: 69 73 20 64 69 73 61 62 6c 65 64 2c 20 6d 65 6d  is disabled, mem
0900: 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b 69  ory usage tracki
0910: 6e 67 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70  ng will not be p
0920: 65 72 66 6f 72 6d 65 64 2e 20 20 54 68 69 73 20  erformed.  This 
0930: 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20  is not really a 
0940: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76  per-connection v
0950: 61 6c 75 65 2c 20 69 74 20 69 73 0d 0a 20 20 20  alue, it is..   
0960: 20 2f 2f 2f 20 67 6c 6f 62 61 6c 20 74 6f 20 74   /// global to t
0970: 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  he process...   
0980: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0990: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
09a0: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 4e 6f 6e  name="value">Non
09b0: 2d 7a 65 72 6f 20 74 6f 20 65 6e 61 62 6c 65 20  -zero to enable 
09c0: 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61  memory usage tra
09d0: 63 6b 69 6e 67 2c 20 7a 65 72 6f 20 6f 74 68 65  cking, zero othe
09e0: 72 77 69 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  rwise.</param>..
09f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
0a00: 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69  >A standard SQLi
0a10: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28  te return code (
0a20: 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75  i.e. zero for su
0a30: 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65  ccess and non-ze
0a40: 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e  ro for failure).
0a50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
0a60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
0a70: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
0a80: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
0a90: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 3b 0d 0a  s(bool value);..
0aa0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0ab0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
0ac0: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
0ad0: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
0ae0: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
0af0: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
0b00: 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e   config options.
0b10: 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70  ..    /// We dep
0b20: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
0b30: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
0b40: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
0b50: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
0b70: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
0b80: 65 20 53 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20  e Shutdown();.. 
0b90: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0ba0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
0bb0: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  s non-zero if a 
0bc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
0bd0: 69 6f 6e 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20  ion is open...  
0be0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
0c00: 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ns></returns>.. 
0c10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
0c20: 72 61 63 74 20 62 6f 6f 6c 20 49 73 4f 70 65 6e  ract bool IsOpen
0c30: 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ();..    /// <su
0c40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0c50: 4f 70 65 6e 73 20 61 20 64 61 74 61 62 61 73 65  Opens a database
0c60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0c70: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
0c80: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
0c90: 2f 20 49 6d 70 6c 65 6d 65 6e 74 65 72 73 20 73  / Implementers s
0ca0: 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51 4c 69 74  hould call SQLit
0cb0: 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75  eFunction.BindFu
0cc0: 6e 63 74 69 6f 6e 73 28 29 20 61 6e 64 20 73 61  nctions() and sa
0cd0: 76 65 20 74 68 65 20 61 72 72 61 79 20 61 66 74  ve the array aft
0ce0: 65 72 20 6f 70 65 6e 69 6e 67 20 61 20 63 6f 6e  er opening a con
0cf0: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  nection..    ///
0d00: 20 74 6f 20 62 69 6e 64 20 61 6c 6c 20 61 74 74   to bind all att
0d10: 72 69 62 75 74 65 64 20 75 73 65 72 2d 64 65 66  ributed user-def
0d20: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61  ined functions a
0d30: 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
0d40: 75 65 6e 63 65 73 20 74 6f 20 74 68 65 20 6e 65  uences to the ne
0d50: 77 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  w connection... 
0d60: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
0d70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d80: 6d 20 6e 61 6d 65 3d 22 73 74 72 46 69 6c 65 6e  m name="strFilen
0d90: 61 6d 65 22 3e 54 68 65 20 66 69 6c 65 6e 61 6d  ame">The filenam
0da0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
0db0: 65 20 74 6f 20 6f 70 65 6e 2e 20 20 53 51 4c 69  e to open.  SQLi
0dc0: 74 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  te automatically
0dd0: 20 63 72 65 61 74 65 73 20 69 74 20 69 66 20 69   creates it if i
0de0: 74 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 2e  t doesn't exist.
0df0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0e00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
0e10: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 22 3e  onnectionFlags">
0e20: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
0e30: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
0e40: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
0e50: 6f 62 6a 65 63 74 3c 2f 70 61 72 61 6d 3e 0d 0a  object</param>..
0e60: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0e70: 61 6d 65 3d 22 6f 70 65 6e 46 6c 61 67 73 22 3e  ame="openFlags">
0e80: 54 68 65 20 6f 70 65 6e 20 66 6c 61 67 73 20 74  The open flags t
0e90: 6f 20 75 73 65 20 77 68 65 6e 20 63 72 65 61 74  o use when creat
0ea0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
0eb0: 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  on</param>..    
0ec0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0ed0: 22 6d 61 78 50 6f 6f 6c 53 69 7a 65 22 3e 54 68  "maxPoolSize">Th
0ee0: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  e maximum size o
0ef0: 66 20 74 68 65 20 70 6f 6f 6c 20 66 6f 72 20 74  f the pool for t
0f00: 68 65 20 67 69 76 65 6e 20 66 69 6c 65 6e 61 6d  he given filenam
0f10: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
0f20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0f30: 75 73 65 50 6f 6f 6c 22 3e 49 66 20 74 72 75 65  usePool">If true
0f40: 2c 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  , the connection
0f50: 20 63 61 6e 20 62 65 20 70 75 6c 6c 65 64 20 66   can be pulled f
0f60: 72 6f 6d 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  rom the connecti
0f70: 6f 6e 20 70 6f 6f 6c 3c 2f 70 61 72 61 6d 3e 0d  on pool</param>.
0f80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0f90: 73 74 72 61 63 74 20 76 6f 69 64 20 4f 70 65 6e  stract void Open
0fa0: 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e  (string strFilen
0fb0: 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ame, SQLiteConne
0fc0: 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65  ctionFlags conne
0fd0: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69  ctionFlags, SQLi
0fe0: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20  teOpenFlagsEnum 
0ff0: 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d  openFlags, int m
1000: 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c  axPoolSize, bool
1010: 20 75 73 65 50 6f 6f 6c 29 3b 0d 0a 20 20 20 20   usePool);..    
1020: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1030: 20 20 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74 68     /// Closes th
1040: 65 20 63 75 72 72 65 6e 74 6c 79 2d 6f 70 65 6e  e currently-open
1050: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
1060: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1070: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
1080: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 66 74 65 72  >..    /// After
1090: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
10a0: 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 20 69 6d  s been closed im
10b0: 70 6c 65 6d 65 74 65 72 73 20 73 68 6f 75 6c 64  plemeters should
10c0: 20 63 61 6c 6c 20 53 51 4c 69 74 65 46 75 6e 63   call SQLiteFunc
10d0: 74 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74  tion.UnbindFunct
10e0: 69 6f 6e 73 28 29 20 74 6f 20 64 65 61 6c 6c 6f  ions() to deallo
10f0: 63 61 74 65 20 61 6c 6c 20 69 6e 74 65 72 6f 70  cate all interop
1100: 20 61 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20   allocated..    
1110: 2f 2f 2f 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63  /// memory assoc
1120: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 75  iated with the u
1130: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
1140: 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74  tions and collat
1150: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 69  ing sequences ti
1160: 65 64 20 74 6f 20 74 68 65 20 63 6c 6f 73 65 64  ed to the closed
1170: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
1180: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
1190: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11a0: 20 6e 61 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22   name="canThrow"
11b0: 3e 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65  >Non-zero if the
11c0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61 6c   operation is al
11d0: 6c 6f 77 65 64 20 74 6f 20 74 68 72 6f 77 20 65  lowed to throw e
11e0: 78 63 65 70 74 69 6f 6e 73 2c 20 7a 65 72 6f 20  xceptions, zero 
11f0: 6f 74 68 65 72 77 69 73 65 2e 3c 2f 70 61 72 61  otherwise.</para
1200: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1210: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43   abstract void C
1220: 6c 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72  lose(bool canThr
1230: 6f 77 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ow);..    /// <s
1240: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1250: 20 53 65 74 73 20 74 68 65 20 62 75 73 79 20 74   Sets the busy t
1260: 69 6d 65 6f 75 74 20 6f 6e 20 74 68 65 20 63 6f  imeout on the co
1270: 6e 6e 65 63 74 69 6f 6e 2e 20 20 53 51 4c 69 74  nnection.  SQLit
1280: 65 43 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 63 61  eCommand will ca
1290: 6c 6c 20 74 68 69 73 20 62 65 66 6f 72 65 20 65  ll this before e
12a0: 78 65 63 75 74 69 6e 67 20 61 6e 79 20 63 6f 6d  xecuting any com
12b0: 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mand...    /// <
12c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
12d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
12e0: 6e 54 69 6d 65 6f 75 74 4d 53 22 3e 54 68 65 20  nTimeoutMS">The 
12f0: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
1300: 65 63 6f 6e 64 73 20 74 6f 20 77 61 69 74 20 62  econds to wait b
1310: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
1320: 53 51 4c 49 54 45 5f 42 55 53 59 3c 2f 70 61 72  SQLITE_BUSY</par
1330: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
1340: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
1350: 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e  SetTimeout(int n
1360: 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20  TimeoutMS);..   
1370: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1380: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
1390: 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
13a0: 6c 61 73 74 20 65 72 72 6f 72 20 69 73 73 75 65  last error issue
13b0: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
13c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
13d0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
13e0: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s></returns>..  
13f0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1400: 61 63 74 20 73 74 72 69 6e 67 20 47 65 74 4c 61  act string GetLa
1410: 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20  stError();....  
1420: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1430: 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 70 6f  .    /// When po
1440: 6f 6c 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  oling is enabled
1450: 2c 20 66 6f 72 63 65 20 74 68 69 73 20 63 6f 6e  , force this con
1460: 6e 65 63 74 69 6f 6e 20 74 6f 20 62 65 20 64 69  nection to be di
1470: 73 70 6f 73 65 64 20 72 61 74 68 65 72 20 74 68  sposed rather th
1480: 61 6e 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  an returned to t
1490: 68 65 20 70 6f 6f 6c 0d 0a 20 20 20 20 2f 2f 2f  he pool..    ///
14a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
14b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
14c0: 63 74 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f  ct void ClearPoo
14d0: 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  l();....    /// 
14e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
14f0: 2f 2f 20 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20  // When pooling 
1500: 69 73 20 65 6e 61 62 6c 65 64 2c 20 72 65 74 75  is enabled, retu
1510: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1520: 66 20 70 6f 6f 6c 20 65 6e 74 72 69 65 73 20 6d  f pool entries m
1530: 61 74 63 68 69 6e 67 20 74 68 65 20 63 75 72 72  atching the curr
1540: 65 6e 74 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  ent file name...
1550: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1560: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
1570: 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
1580: 6f 66 20 70 6f 6f 6c 20 65 6e 74 72 69 65 73 20  of pool entries 
1590: 6d 61 74 63 68 69 6e 67 20 74 68 65 20 63 75 72  matching the cur
15a0: 72 65 6e 74 20 66 69 6c 65 20 6e 61 6d 65 2e 3c  rent file name.<
15b0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
15c0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
15d0: 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29   int CountPool()
15e0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
15f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1600: 50 72 65 70 61 72 65 73 20 61 20 53 51 4c 20 73  Prepares a SQL s
1610: 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 65 78 65  tatement for exe
1620: 63 75 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  cution...    ///
1630: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1640: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1650: 3d 22 63 6e 6e 22 3e 54 68 65 20 73 6f 75 72 63  ="cnn">The sourc
1660: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65  e connection pre
1670: 70 61 72 69 6e 67 20 74 68 65 20 63 6f 6d 6d 61  paring the comma
1680: 6e 64 2e 20 20 43 61 6e 20 62 65 20 6e 75 6c 6c  nd.  Can be null
1690: 20 66 6f 72 20 61 6e 79 20 63 61 6c 6c 65 72 20   for any caller 
16a0: 65 78 63 65 70 74 20 4c 49 4e 51 3c 2f 70 61 72  except LINQ</par
16b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
16c0: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c  ram name="strSql
16d0: 22 3e 54 68 65 20 53 51 4c 20 63 6f 6d 6d 61 6e  ">The SQL comman
16e0: 64 20 74 65 78 74 20 74 6f 20 70 72 65 70 61 72  d text to prepar
16f0: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
1700: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1710: 70 72 65 76 69 6f 75 73 22 3e 54 68 65 20 70 72  previous">The pr
1720: 65 76 69 6f 75 73 20 73 74 61 74 65 6d 65 6e 74  evious statement
1730: 20 69 6e 20 61 20 6d 75 6c 74 69 2d 73 74 61 74   in a multi-stat
1740: 65 6d 65 6e 74 20 63 6f 6d 6d 61 6e 64 2c 20 6f  ement command, o
1750: 72 20 6e 75 6c 6c 20 69 66 20 6e 6f 20 70 72 65  r null if no pre
1760: 76 69 6f 75 73 20 73 74 61 74 65 6d 65 6e 74 20  vious statement 
1770: 65 78 69 73 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a  exists</param>..
1780: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1790: 61 6d 65 3d 22 74 69 6d 65 6f 75 74 4d 53 22 3e  ame="timeoutMS">
17a0: 54 68 65 20 74 69 6d 65 6f 75 74 20 74 6f 20 77  The timeout to w
17b0: 61 69 74 20 62 65 66 6f 72 65 20 61 62 6f 72 74  ait before abort
17c0: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 65 3c  ing the prepare<
17d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
17e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
17f0: 72 52 65 6d 61 69 6e 22 3e 54 68 65 20 72 65 6d  rRemain">The rem
1800: 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 73 74  ainder of the st
1810: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 61 73  atement that was
1820: 20 6e 6f 74 20 70 72 6f 63 65 73 73 65 64 2e 20   not processed. 
1830: 20 45 61 63 68 20 63 61 6c 6c 20 74 6f 20 70 72   Each call to pr
1840: 65 70 61 72 65 20 70 61 72 73 65 73 20 74 68 65  epare parses the
1850: 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 20 75 70  ..    /// SQL up
1860: 20 74 6f 20 74 6f 20 65 69 74 68 65 72 20 74 68   to to either th
1870: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
1880: 74 20 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  t or to the firs
1890: 74 20 73 65 6d 69 2d 63 6f 6c 6f 6e 20 64 65 6c  t semi-colon del
18a0: 69 6d 69 74 65 72 2e 20 20 54 68 65 20 72 65 6d  imiter.  The rem
18b0: 61 69 6e 69 6e 67 20 74 65 78 74 20 69 73 20 72  aining text is r
18c0: 65 74 75 72 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f  eturned..    ///
18d0: 20 68 65 72 65 20 66 6f 72 20 61 20 73 75 62 73   here for a subs
18e0: 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f 20 50  equent call to P
18f0: 72 65 70 61 72 65 28 29 20 75 6e 74 69 6c 20 61  repare() until a
1900: 6c 6c 20 74 68 65 20 74 65 78 74 20 68 61 73 20  ll the text has 
1910: 62 65 65 6e 20 70 72 6f 63 65 73 73 65 64 2e 3c  been processed.<
1920: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1930: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
1940: 73 20 61 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  s an initialized
1950: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
1960: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
1970: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1980: 63 74 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ct SQLiteStateme
1990: 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74  nt Prepare(SQLit
19a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c  eConnection cnn,
19b0: 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20   string strSql, 
19c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
19d0: 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74  previous, uint t
19e0: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
19f0: 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 3b  ring strRemain);
1a00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1a10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 65  ry>..    /// Ste
1a20: 70 73 20 74 68 72 6f 75 67 68 20 61 20 70 72 65  ps through a pre
1a30: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
1a40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1a60: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
1a70: 3e 54 68 65 20 53 51 4c 69 74 65 53 74 61 74 65  >The SQLiteState
1a80: 6d 65 6e 74 20 74 6f 20 73 74 65 70 20 74 68 72  ment to step thr
1a90: 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ough</param>..  
1aa0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
1ab0: 72 75 65 20 69 66 20 61 20 72 6f 77 20 77 61 73  rue if a row was
1ac0: 20 72 65 74 75 72 6e 65 64 2c 20 46 61 6c 73 65   returned, False
1ad0: 20 69 66 20 6e 6f 74 2e 3c 2f 72 65 74 75 72 6e   if not.</return
1ae0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1af0: 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 53   abstract bool S
1b00: 74 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tep(SQLiteStatem
1b10: 65 6e 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ent stmt);..    
1b20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1b30: 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 61 20     /// Resets a 
1b40: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b50: 6e 74 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20  nt so it can be 
1b60: 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 2e 20  executed again. 
1b70: 20 49 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   If the error re
1b80: 74 75 72 6e 65 64 20 69 73 20 53 51 4c 49 54 45  turned is SQLITE
1b90: 5f 53 43 48 45 4d 41 2c 20 0d 0a 20 20 20 20 2f  _SCHEMA, ..    /
1ba0: 2f 2f 20 74 72 61 6e 73 70 61 72 65 6e 74 6c 79  // transparently
1bb0: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 62 75   attempt to rebu
1bc0: 69 6c 64 20 74 68 65 20 53 51 4c 20 73 74 61 74  ild the SQL stat
1bd0: 65 6d 65 6e 74 20 61 6e 64 20 74 68 72 6f 77 20  ement and throw 
1be0: 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 61 74  an error if that
1bf0: 20 77 61 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c   was not possibl
1c00: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
1c10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1c20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
1c30: 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74  t">The statement
1c40: 20 74 6f 20 72 65 73 65 74 3c 2f 70 61 72 61 6d   to reset</param
1c50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1c60: 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31 20 69  rns>Returns -1 i
1c70: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
1c80: 6e 67 65 64 20 77 68 69 6c 65 20 72 65 73 65 74  nged while reset
1c90: 74 69 6e 67 2c 20 30 20 69 66 20 74 68 65 20 72  ting, 0 if the r
1ca0: 65 73 65 74 20 77 61 73 20 73 75 63 65 73 73 66  eset was sucessf
1cb0: 75 6c 20 6f 72 20 36 20 28 53 51 4c 49 54 45 5f  ul or 6 (SQLITE_
1cc0: 4c 4f 43 4b 45 44 29 20 69 66 20 74 68 65 20 72  LOCKED) if the r
1cd0: 65 73 65 74 20 66 61 69 6c 65 64 20 64 75 65 20  eset failed due 
1ce0: 74 6f 20 61 20 6c 6f 63 6b 3c 2f 72 65 74 75 72  to a lock</retur
1cf0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1d00: 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  l abstract SQLit
1d10: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74  eErrorCode Reset
1d20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1d30: 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74   stmt);..    int
1d40: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
1d50: 6f 69 64 20 43 61 6e 63 65 6c 28 29 3b 0d 0a 0d  oid Cancel();...
1d60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1d70: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
1d80: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
1d90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
1da0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1db0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
1dc0: 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c  ndex, double val
1dd0: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
1de0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1df0: 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69   Bind_Int32(SQLi
1e00: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1e10: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
1e20: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
1e30: 6e 74 20 69 6e 64 65 78 2c 20 49 6e 74 33 32 20  nt index, Int32 
1e40: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
1e50: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
1e60: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28  oid Bind_UInt32(
1e70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1e80: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
1e90: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
1ea0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 55 49  s, int index, UI
1eb0: 6e 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20  nt32 value);..  
1ec0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1ed0: 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  act void Bind_In
1ee0: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
1ef0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
1f00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
1f10: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
1f20: 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d  , Int64 value);.
1f30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1f40: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
1f50: 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  _UInt64(SQLiteSt
1f60: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
1f70: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1f80: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
1f90: 6e 64 65 78 2c 20 55 49 6e 74 36 34 20 76 61 6c  ndex, UInt64 val
1fa0: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
1fb0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1fc0: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
1fd0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
1fe0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1ff0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
2000: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
2010: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
2020: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2030: 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51  oid Bind_Blob(SQ
2040: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2050: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
2060: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
2070: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
2080: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  [] blobData);.. 
2090: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
20a0: 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44  ract void Bind_D
20b0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
20c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
20d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
20e0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
20f0: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
2100: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
2110: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2120: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
2130: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2140: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2150: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
2160: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
2170: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2180: 74 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d  t int Bind_Param
2190: 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
21a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
21b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
21c0: 73 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 69  s flags);..    i
21d0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
21e0: 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72   string Bind_Par
21f0: 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  amName(SQLiteSta
2200: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
2210: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2220: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
2230: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
2240: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
2250: 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78   Bind_ParamIndex
2260: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2270: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
2280: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
2290: 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  gs, string param
22a0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e  Name);....    in
22b0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
22c0: 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  int ColumnCount(
22d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
22e0: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65  stmt);..    inte
22f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
2300: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
2310: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2320: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2330: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2340: 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66 66  abstract TypeAff
2350: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
2360: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
2370: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
2380: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
2390: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
23a0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
23b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
23c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
23d0: 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74   out TypeAffinit
23e0: 79 20 6e 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20  y nAffinity);.. 
23f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2400: 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49  ract int ColumnI
2410: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
2420: 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e  ment stmt, strin
2430: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  g columnName);..
2440: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2450: 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c  tract string Col
2460: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
2470: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2480: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2490: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
24a0: 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20  abstract string 
24b0: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
24c0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
24d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
24e0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
24f0: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
2500: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
2510: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
2520: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
2530: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
2540: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2550: 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
2560: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
2570: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
2580: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
2590: 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  t string dataTyp
25a0: 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  e, out string co
25b0: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f  llateSequence, o
25c0: 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ut bool notNull,
25d0: 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72   out bool primar
25e0: 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61  yKey, out bool a
25f0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a  utoIncrement);..
2600: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2610: 74 72 61 63 74 20 76 6f 69 64 20 47 65 74 49 6e  tract void GetIn
2620: 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65  dexColumnExtende
2630: 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74  dInfo(string dat
2640: 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e  abase, string in
2650: 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  dex, string colu
2660: 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72 74  mn, out int sort
2670: 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e  Mode, out int on
2680: 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e  Error, out strin
2690: 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  g collationSeque
26a0: 6e 63 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  nce);....    int
26b0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64  ernal abstract d
26c0: 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28  ouble GetDouble(
26d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
26e0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
26f0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2700: 61 62 73 74 72 61 63 74 20 53 42 79 74 65 20 47  abstract SByte G
2710: 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
2720: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2730: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
2740: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2750: 20 42 79 74 65 20 47 65 74 42 79 74 65 28 53 51   Byte GetByte(SQ
2760: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2770: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
2780: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2790: 73 74 72 61 63 74 20 49 6e 74 31 36 20 47 65 74  stract Int16 Get
27a0: 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
27b0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
27c0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
27d0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 55  ernal abstract U
27e0: 49 6e 74 31 36 20 47 65 74 55 49 6e 74 31 36 28  Int16 GetUInt16(
27f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2800: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2810: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2820: 61 62 73 74 72 61 63 74 20 49 6e 74 33 32 20 47  abstract Int32 G
2830: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
2840: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2850: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
2860: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2870: 20 55 49 6e 74 33 32 20 47 65 74 55 49 6e 74 33   UInt32 GetUInt3
2880: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
2890: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
28a0: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
28b0: 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 36 34  l abstract Int64
28c0: 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
28d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
28e0: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
28f0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2900: 63 74 20 55 49 6e 74 36 34 20 47 65 74 55 49 6e  ct UInt64 GetUIn
2910: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
2920: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2930: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
2940: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
2950: 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c 69  ing GetText(SQLi
2960: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2970: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
2980: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2990: 72 61 63 74 20 6c 6f 6e 67 20 47 65 74 42 79 74  ract long GetByt
29a0: 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
29b0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
29c0: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 6f 66 66  ex, int nDataoff
29d0: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
29e0: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
29f0: 6e 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  nt nLength);..  
2a00: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2a10: 61 63 74 20 6c 6f 6e 67 20 47 65 74 43 68 61 72  act long GetChar
2a20: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
2a30: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2a40: 78 2c 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73  x, int nDataoffs
2a50: 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74  et, char[] bDest
2a60: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
2a70: 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t nLength);..   
2a80: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2a90: 63 74 20 44 61 74 65 54 69 6d 65 20 47 65 74 44  ct DateTime GetD
2aa0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
2ab0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2ac0: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
2ad0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2ae0: 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c   bool IsNull(SQL
2af0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2b00: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
2b10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2b20: 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 72 65  bstract void Cre
2b30: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72  ateCollation(str
2b40: 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  ing strCollation
2b50: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
2b60: 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f  n func, SQLiteCo
2b70: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 3b  llation func16);
2b80: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2b90: 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 72 65  bstract void Cre
2ba0: 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69  ateFunction(stri
2bb0: 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20  ng strFunction, 
2bc0: 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20  int nArgs, bool 
2bd0: 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c  needCollSeq, SQL
2be0: 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
2bf0: 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
2c00: 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74   funcstep, SQLit
2c10: 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66  eFinalCallback f
2c20: 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  uncfinal);..    
2c30: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2c40: 74 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  t CollationSeque
2c50: 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e  nce GetCollation
2c60: 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46  Sequence(SQLiteF
2c70: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e  unction func, In
2c80: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a  tPtr context);..
2c90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2ca0: 74 72 61 63 74 20 69 6e 74 20 43 6f 6e 74 65 78  tract int Contex
2cb0: 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
2cc0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
2cd0: 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
2ce0: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
2cf0: 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29  g s1, string s2)
2d00: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2d10: 61 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6e  abstract int Con
2d20: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
2d30: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
2d40: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
2d50: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68  tPtr context, ch
2d60: 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20  ar[] c1, char[] 
2d70: 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  c2);....    inte
2d80: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
2d90: 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74  t AggregateCount
2da0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
2db0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2dc0: 61 62 73 74 72 61 63 74 20 49 6e 74 50 74 72 20  abstract IntPtr 
2dd0: 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74  AggregateContext
2de0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
2df0: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
2e00: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
2e10: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74  GetParamValueByt
2e20: 65 73 28 49 6e 74 50 74 72 20 70 74 72 2c 20 69  es(IntPtr ptr, i
2e30: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
2e40: 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
2e50: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
2e60: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74  ength);..    int
2e70: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64  ernal abstract d
2e80: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
2e90: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
2ea0: 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65   ptr);..    inte
2eb0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
2ec0: 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  t GetParamValueI
2ed0: 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29  nt32(IntPtr ptr)
2ee0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2ef0: 61 62 73 74 72 61 63 74 20 49 6e 74 36 34 20 47  abstract Int64 G
2f00: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36  etParamValueInt6
2f10: 34 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a  4(IntPtr ptr);..
2f20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2f30: 74 72 61 63 74 20 73 74 72 69 6e 67 20 47 65 74  tract string Get
2f40: 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
2f50: 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20  ntPtr ptr);..   
2f60: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2f70: 63 74 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  ct TypeAffinity 
2f80: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70  GetParamValueTyp
2f90: 65 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a  e(IntPtr ptr);..
2fa0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2fb0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74  bstract void Ret
2fc0: 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63  urnBlob(IntPtr c
2fd0: 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76  ontext, byte[] v
2fe0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65  alue);..    inte
2ff0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3000: 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28  id ReturnDouble(
3010: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
3020: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 3b 0d 0a  double value);..
3030: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3040: 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72  tract void Retur
3050: 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f  nError(IntPtr co
3060: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
3070: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
3080: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3090: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
30a0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e  tPtr context, In
30b0: 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t32 value);..   
30c0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
30d0: 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  ct void ReturnIn
30e0: 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
30f0: 78 74 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29  xt, Int64 value)
3100: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3110: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65  abstract void Re
3120: 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20  turnNull(IntPtr 
3130: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69  context);..    i
3140: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3150: 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74   void ReturnText
3160: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
3170: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d   string value);.
3180: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3190: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
31a0: 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
31b0: 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  d extension load
31c0: 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a  ing by SQLite...
31d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
31e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
31f0: 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22  am name="bOnOff"
3200: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
3210: 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e  to enable loadin
3220: 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c  g of extensions,
3230: 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   false to disabl
3240: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
3250: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
3260: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
3270: 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
3280: 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d  n(bool bOnOff);.
3290: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
32a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64  y>..    /// Load
32b0: 73 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e  s a SQLite exten
32c0: 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f  sion library fro
32d0: 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65  m the named file
32e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
32f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3300: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65  param name="file
3310: 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
3320: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
3330: 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62  dynamic link lib
3340: 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69  rary file contai
3350: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69  ning the extensi
3360: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  on...    /// </p
3370: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3380: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63  param name="proc
3390: 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
33a0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
33b0: 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f  exported functio
33c0: 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61  n used to initia
33d0: 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69  lize the extensi
33e0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  on...    /// If 
33f0: 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c  null, the defaul
3400: 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  t "sqlite3_exten
3410: 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20  sion_init" will 
3420: 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  be used...    //
3430: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
3440: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3450: 74 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e  t void LoadExten
3460: 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65  sion(string file
3470: 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f  Name, string pro
3480: 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f  cName);..    ///
3490: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
34a0: 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
34b0: 69 73 61 62 6c 65 64 20 65 78 74 65 6e 65 64 20  isabled extened 
34c0: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
34d0: 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
34e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
34f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3500: 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66  ram name="bOnOff
3510: 22 3e 74 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  ">true to enable
3520: 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74   extended result
3530: 20 63 6f 64 65 73 2c 20 66 61 6c 73 65 20 74 6f   codes, false to
3540: 20 64 69 73 61 62 6c 65 2e 3c 2f 70 61 72 61 6d   disable.</param
3550: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3560: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
3570: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3580: 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 45 78  tract void SetEx
3590: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
35a0: 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d  s(bool bOnOff);.
35b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
35c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
35d0: 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
35e0: 72 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72 20  result code for 
35f0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
3600: 66 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41 50  failed SQLite AP
3610: 49 20 63 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f  I call ..    ///
3620: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3630: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
3640: 6e 6e 65 63 74 69 6f 6e 2e 20 0d 0a 20 20 20 20  nnection. ..    
3650: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3660: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3670: 3e 52 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65  >Result code</re
3680: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
3690: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51  rnal abstract SQ
36a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
36b0: 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 20 20 20  sultCode();..   
36c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
36d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
36e0: 74 68 65 20 65 78 74 65 6e 64 65 64 20 6e 75 6d  the extended num
36f0: 65 72 69 63 20 72 65 73 75 6c 74 20 63 6f 64 65  eric result code
3700: 20 66 6f 72 20 74 68 65 20 6d 6f 73 74 20 72 65   for the most re
3710: 63 65 6e 74 20 66 61 69 6c 65 64 20 53 51 4c 69  cent failed SQLi
3720: 74 65 20 41 50 49 20 63 61 6c 6c 20 0d 0a 20 20  te API call ..  
3730: 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
3740: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
3750: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 0d  se connection. .
3760: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3770: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
3780: 74 75 72 6e 73 3e 45 78 74 65 6e 64 65 64 20 72  turns>Extended r
3790: 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
37a0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
37b0: 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  al abstract SQLi
37c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65  teErrorCode Exte
37d0: 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29  ndedResultCode()
37e0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
37f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3800: 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
3810: 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
3820: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
3830: 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erface...    ///
3840: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3850: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3860: 3d 22 69 45 72 72 43 6f 64 65 22 3e 45 72 72 6f  ="iErrCode">Erro
3870: 72 20 63 6f 64 65 20 74 6f 20 62 65 20 6c 6f 67  r code to be log
3880: 67 65 64 20 77 69 74 68 20 74 68 65 20 6d 65 73  ged with the mes
3890: 73 61 67 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  sage.</param>.. 
38a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
38b0: 6d 65 3d 22 7a 4d 65 73 73 61 67 65 22 3e 53 74  me="zMessage">St
38c0: 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67 65  ring to be logge
38d0: 64 2e 20 20 55 6e 6c 69 6b 65 20 74 68 65 20 53  d.  Unlike the S
38e0: 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
38f0: 67 28 29 20 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  g() ..    /// in
3900: 74 65 72 66 61 63 65 2c 20 74 68 69 73 20 73 68  terface, this sh
3910: 6f 75 6c 64 20 62 65 20 70 72 65 2d 66 6f 72 6d  ould be pre-form
3920: 61 74 74 65 64 2e 20 20 43 6f 6e 73 69 64 65 72  atted.  Consider
3930: 20 75 73 69 6e 67 20 74 68 65 20 0d 0a 20 20 20   using the ..   
3940: 20 2f 2f 2f 20 53 74 72 69 6e 67 2e 46 6f 72 6d   /// String.Form
3950: 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  at() function.</
3960: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3970: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
3980: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
3990: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
39a0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
39b0: 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
39c0: 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
39d0: 73 61 67 65 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e  sage);....#if IN
39e0: 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20  TEROP_CODEC..   
39f0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3a00: 63 74 20 76 6f 69 64 20 53 65 74 50 61 73 73 77  ct void SetPassw
3a10: 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77  ord(byte[] passw
3a20: 6f 72 64 42 79 74 65 73 29 3b 0d 0a 20 20 20 20  ordBytes);..    
3a30: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3a40: 74 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73  t void ChangePas
3a50: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77  sword(byte[] new
3a60: 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 3b 0d  PasswordBytes);.
3a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
3a80: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3a90: 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
3aa0: 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
3ab0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d  Callback func);.
3ac0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3ad0: 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 43  stract void SetC
3ae0: 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
3af0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
3b00: 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  unc);..    inter
3b10: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3b20: 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
3b30: 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
3b40: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20  llback func);.. 
3b50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3b60: 72 61 63 74 20 76 6f 69 64 20 53 65 74 52 6f 6c  ract void SetRol
3b70: 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
3b80: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
3b90: 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74   func);..    int
3ba0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
3bb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
3bc0: 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
3bd0: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
3be0: 66 75 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  func);....    //
3bf0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3c00: 20 2f 2f 2f 20 43 68 65 63 6b 73 20 69 66 20 74   /// Checks if t
3c10: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
3c20: 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
3c30: 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74  initialized in t
3c40: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
3c50: 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
3c60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3c70: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
3c80: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
3c90: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
3ca0: 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
3cb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20   initialized in 
3cc0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
3cd0: 65 73 73 2c 0d 0a 20 20 20 20 2f 2f 2f 20 7a 65  ess,..    /// ze
3ce0: 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  ro otherwise... 
3cf0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
3d00: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3d10: 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 49 73  abstract bool Is
3d20: 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a  Initialized();..
3d30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3d40: 62 73 74 72 61 63 74 20 69 6e 74 20 47 65 74 43  bstract int GetC
3d50: 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51  ursorForTable(SQ
3d60: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3d70: 6d 74 2c 20 69 6e 74 20 64 61 74 61 62 61 73 65  mt, int database
3d80: 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 3b  , int rootPage);
3d90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3da0: 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65 74  bstract long Get
3db0: 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53  RowIdForCursor(S
3dc0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3dd0: 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29  tmt, int cursor)
3de0: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
3df0: 6c 20 61 62 73 74 72 61 63 74 20 6f 62 6a 65 63  l abstract objec
3e00: 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
3e10: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3e20: 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69   int index, SQLi
3e30: 74 65 54 79 70 65 20 74 79 70 29 3b 0d 0a 0d 0a  teType typ);....
3e40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3e50: 74 72 61 63 74 20 62 6f 6f 6c 20 41 75 74 6f 43  tract bool AutoC
3e60: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
3e70: 20 20 20 20 67 65 74 3b 0d 0a 20 20 20 20 7d 0d      get;..    }.
3e80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3e90: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
3ea0: 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e  rrorCode FileCon
3eb0: 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e  trol(string zDbN
3ec0: 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74  ame, int op, Int
3ed0: 50 74 72 20 70 41 72 67 29 3b 0d 0a 0d 0a 20 20  Ptr pArg);....  
3ee0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3ef0: 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73  .    /// Creates
3f00: 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61   a new SQLite ba
3f10: 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65  ckup object base
3f20: 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65  d on the provide
3f30: 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  d destination.. 
3f40: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
3f50: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
3f60: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
3f70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74   connection is t
3f80: 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  he one..    /// 
3f90: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3fa0: 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
3fb0: 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73  e source and des
3fc0: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
3fd0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
3fe0: 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65  ctions cannot be
3ff0: 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20   the same...    
4000: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4010: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4020: 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68  ame="destCnn">Th
4030: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
4040: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4050: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
4060: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4070: 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64  "destName">The d
4080: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
4090: 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
40a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
40b0: 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61  m name="sourceNa
40c0: 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64  me">The source d
40d0: 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
40e0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
40f0: 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c  returns>The newl
4100: 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70  y created backup
4110: 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
4120: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4130: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
4140: 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a  Backup Initializ
4150: 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
4160: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
4170: 6f 6e 20 64 65 73 74 43 6e 6e 2c 20 73 74 72 69  on destCnn, stri
4180: 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20  ng destName,..  
4190: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75        string sou
41a0: 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
41b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
41c0: 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75      /// Copies u
41d0: 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f  p to N pages fro
41e0: 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  m the source dat
41f0: 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73  abase to the des
4200: 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  tination..    //
4210: 2f 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  / database assoc
4220: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
4230: 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
4240: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
4250: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4260: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4270: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
4280: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75  ckup object to u
4290: 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
42a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
42b0: 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f  ="nPage">..    /
42c0: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
42d0: 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79 20 6f   pages to copy o
42e0: 72 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f  r negative to co
42f0: 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  py all remaining
4300: 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   pages...    ///
4310: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
4320: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4330: 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  retry">..    ///
4340: 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20   Set to true if 
4350: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65  the operation ne
4360: 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  eds to be retrie
4370: 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73  d due to databas
4380: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69  e..    /// locki
4390: 6e 67 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20  ng issues...    
43a0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
43b0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
43c0: 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66  .    /// True if
43d0: 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20   there are more 
43e0: 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69  pages to be copi
43f0: 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77  ed, false otherw
4400: 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ise...    /// </
4410: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
4420: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
4430: 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28  bool StepBackup(
4440: 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
4450: 6b 75 70 2c 20 69 6e 74 20 6e 50 61 67 65 2c 20  kup, int nPage, 
4460: 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 29 3b  out bool retry);
4470: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
4480: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
4490: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
44a0: 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
44b0: 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
44c0: 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  d from the sourc
44d0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  e..    /// datab
44e0: 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
44f0: 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
4500: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
4510: 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
4520: 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62     /// backup ob
4530: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
4540: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
4550: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4560: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
4570: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
4580: 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
4590: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
45a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
45b0: 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
45c0: 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72  e copied.</retur
45d0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
45e0: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 52  l abstract int R
45f0: 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 53  emainingBackup(S
4600: 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
4610: 75 70 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  up);....    /// 
4620: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4630: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
4640: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
4650: 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
4660: 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  ce database asso
4670: 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
4680: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
4690: 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
46a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
46b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
46c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
46d0: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
46e0: 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
46f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4700: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f   <returns>The to
4710: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
4720: 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
4730: 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74  e database.</ret
4740: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4750: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
4760: 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70   PageCountBackup
4770: 28 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61  (SQLiteBackup ba
4780: 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ckup);....    //
4790: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
47a0: 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68   /// Destroys th
47b0: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c  e backup object,
47c0: 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e   rolling back an
47d0: 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61  y backup that ma
47e0: 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  y be in..    ///
47f0: 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f   progess...    /
4800: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4810: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4820: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
4830: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
4840: 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d   destroy.</param
4850: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4860: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 46 69  abstract void Fi
4870: 6e 69 73 68 42 61 63 6b 75 70 28 53 51 4c 69 74  nishBackup(SQLit
4880: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 29 3b  eBackup backup);
4890: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
4900: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
4910: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
4920: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
4930: 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ose()..    {..  
4940: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
4950: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 47 43  ue);..        GC
4960: 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
4970: 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 7d 0d  e(this);..    }.
4980: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
4990: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
4a00: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
4a10: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
4a20: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
4a30: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
4a40: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
4a50: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
4a60: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
4a70: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
4a80: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
4a90: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
4aa0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
4ab0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
4ac0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
4ad0: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 42  n(typeof(SQLiteB
4ae0: 61 73 65 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  ase).Name);..#en
4af0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
4b00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
4b70: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
4b80: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
4b90: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
4ba0: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
4bb0: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
4bc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
4bd0: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
4be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b  .            //{
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4c00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
4c30: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
4c40: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
4c50: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
4c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4c70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
4ca0: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
4cb0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
4cf0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
4d00: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
4d10: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
4d20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d50: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
4d60: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
4d70: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
4d80: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
4d90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4df0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
4e00: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
4e10: 7e 53 51 4c 69 74 65 42 61 73 65 28 29 0d 0a 20  ~SQLiteBase().. 
4e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
4e30: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
4e40: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
4e50: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4ec0: 20 20 20 2f 2f 20 54 68 65 73 65 20 73 74 61 74     // These stat
4ed0: 69 63 73 20 61 72 65 20 68 65 72 65 20 66 6f 72  ics are here for
4ee0: 20 6c 61 63 6b 20 6f 66 20 61 20 62 65 74 74 65   lack of a bette
4ef0: 72 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20 74  r place to put t
4f00: 68 65 6d 2e 0d 0a 20 20 20 20 2f 2f 20 54 68 65  hem...    // The
4f10: 79 20 65 78 69 73 74 20 68 65 72 65 20 62 65 63  y exist here bec
4f20: 61 75 73 65 20 74 68 65 79 20 61 72 65 20 63 61  ause they are ca
4f30: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 20  lled during the 
4f40: 66 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0d  finalization of.
4f50: 0a 20 20 20 20 2f 2f 20 61 20 53 51 4c 69 74 65  .    // a SQLite
4f60: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  StatementHandle,
4f70: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4f80: 6e 48 61 6e 64 6c 65 2c 20 61 6e 64 20 53 51 4c  nHandle, and SQL
4f90: 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69  iteFunctionCooki
4fa0: 65 48 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 2f 2f  eHandle...    //
4fb0: 20 54 68 65 72 65 66 6f 72 65 20 74 68 65 73 65   Therefore these
4fc0: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
4fd0: 74 6f 20 62 65 20 73 74 61 74 69 63 2c 20 61 6e  to be static, an
4fe0: 64 20 68 61 76 65 20 74 6f 20 62 65 20 6c 6f 77  d have to be low
4ff0: 2d 6c 65 76 65 6c 2e 0d 0a 0d 0a 20 20 20 20 2f  -level.....    /
5000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5060: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
5070: 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 5f 65  atic string[] _e
5080: 72 72 6f 72 4d 65 73 73 61 67 65 73 20 3d 20 7b  rrorMessages = {
5090: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
50a0: 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 20 2a  TE_OK          *
50b0: 2f 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22  / "not an error"
50c0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
50d0: 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20 20 20  LITE_ERROR      
50e0: 20 2a 2f 20 22 53 51 4c 20 6c 6f 67 69 63 20 65   */ "SQL logic e
50f0: 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
5100: 64 61 74 61 62 61 73 65 22 2c 0d 0a 20 20 20 20  database",..    
5110: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e      /* SQLITE_IN
5120: 54 45 52 4e 41 4c 20 20 20 20 2a 2f 20 22 69 6e  TERNAL    */ "in
5130: 74 65 72 6e 61 6c 20 6c 6f 67 69 63 20 65 72 72  ternal logic err
5140: 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  or",..        /*
5150: 20 53 51 4c 49 54 45 5f 50 45 52 4d 20 20 20 20   SQLITE_PERM    
5160: 20 20 20 20 2a 2f 20 22 61 63 63 65 73 73 20 70      */ "access p
5170: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
5180: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
5190: 51 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20  QLITE_ABORT     
51a0: 20 20 2a 2f 20 22 63 61 6c 6c 62 61 63 6b 20 72    */ "callback r
51b0: 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61  equested query a
51c0: 62 6f 72 74 22 2c 0d 0a 20 20 20 20 20 20 20 20  bort",..        
51d0: 2f 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 20  /* SQLITE_BUSY  
51e0: 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61        */ "databa
51f0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 22 2c 0d 0a  se is locked",..
5200: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
5210: 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 20 2a 2f  E_LOCKED      */
5220: 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
5230: 20 69 73 20 6c 6f 63 6b 65 64 22 2c 0d 0a 20 20   is locked",..  
5240: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
5250: 4e 4f 4d 45 4d 20 20 20 20 20 20 20 2a 2f 20 22  NOMEM       */ "
5260: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 0d  out of memory",.
5270: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
5280: 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20 20 2a  TE_READONLY    *
5290: 2f 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77 72  / "attempt to wr
52a0: 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64  ite a readonly d
52b0: 61 74 61 62 61 73 65 22 2c 0d 0a 20 20 20 20 20  atabase",..     
52c0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54     /* SQLITE_INT
52d0: 45 52 52 55 50 54 20 20 20 2a 2f 20 22 69 6e 74  ERRUPT   */ "int
52e0: 65 72 72 75 70 74 65 64 22 2c 0d 0a 20 20 20 20  errupted",..    
52f0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4f      /* SQLITE_IO
5300: 45 52 52 20 20 20 20 20 20 20 2a 2f 20 22 64 69  ERR       */ "di
5310: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 2c 0d 0a  sk I/O error",..
5320: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
5330: 45 5f 43 4f 52 52 55 50 54 20 20 20 20 20 2a 2f  E_CORRUPT     */
5340: 20 22 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   "database disk 
5350: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
5360: 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  ed",..        /*
5370: 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44   SQLITE_NOTFOUND
5380: 20 20 20 20 2a 2f 20 22 75 6e 6b 6e 6f 77 6e 20      */ "unknown 
5390: 6f 70 65 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  operation",..   
53a0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 46       /* SQLITE_F
53b0: 55 4c 4c 20 20 20 20 20 20 20 20 2a 2f 20 22 64  ULL        */ "d
53c0: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
53d0: 69 73 20 66 75 6c 6c 22 2c 0d 0a 20 20 20 20 20  is full",..     
53e0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43 41 4e     /* SQLITE_CAN
53f0: 54 4f 50 45 4e 20 20 20 20 2a 2f 20 22 75 6e 61  TOPEN    */ "una
5400: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
5410: 62 61 73 65 20 66 69 6c 65 22 2c 0d 0a 20 20 20  base file",..   
5420: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50       /* SQLITE_P
5430: 52 4f 54 4f 43 4f 4c 20 20 20 20 2a 2f 20 22 6c  ROTOCOL    */ "l
5440: 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 22  ocking protocol"
5450: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
5460: 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20 20 20  LITE_EMPTY      
5470: 20 2a 2f 20 22 74 61 62 6c 65 20 63 6f 6e 74 61   */ "table conta
5480: 69 6e 73 20 6e 6f 20 64 61 74 61 22 2c 0d 0a 20  ins no data",.. 
5490: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
54a0: 5f 53 43 48 45 4d 41 20 20 20 20 20 20 2a 2f 20  _SCHEMA      */ 
54b0: 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
54c0: 20 68 61 73 20 63 68 61 6e 67 65 64 22 2c 0d 0a   has changed",..
54d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
54e0: 45 5f 54 4f 4f 42 49 47 20 20 20 20 20 20 2a 2f  E_TOOBIG      */
54f0: 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
5500: 20 74 6f 6f 20 62 69 67 22 2c 0d 0a 20 20 20 20   too big",..    
5510: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43 4f      /* SQLITE_CO
5520: 4e 53 54 52 41 49 4e 54 20 20 2a 2f 20 22 63 6f  NSTRAINT  */ "co
5530: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
5540: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
5550: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20  LITE_MISMATCH   
5560: 20 2a 2f 20 22 64 61 74 61 74 79 70 65 20 6d 69   */ "datatype mi
5570: 73 6d 61 74 63 68 22 2c 0d 0a 20 20 20 20 20 20  smatch",..      
5580: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55    /* SQLITE_MISU
5590: 53 45 20 20 20 20 20 20 2a 2f 20 22 6c 69 62 72  SE      */ "libr
55a0: 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c  ary routine call
55b0: 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e  ed out of sequen
55c0: 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  ce",..        /*
55d0: 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20   SQLITE_NOLFS   
55e0: 20 20 20 20 2a 2f 20 22 6c 61 72 67 65 20 66 69      */ "large fi
55f0: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 64 69  le support is di
5600: 73 61 62 6c 65 64 22 2c 0d 0a 20 20 20 20 20 20  sabled",..      
5610: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 41 55 54 48    /* SQLITE_AUTH
5620: 20 20 20 20 20 20 20 20 2a 2f 20 22 61 75 74 68          */ "auth
5630: 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64  orization denied
5640: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
5650: 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20 20 20 20  QLITE_FORMAT    
5660: 20 20 2a 2f 20 22 61 75 78 69 6c 69 61 72 79 20    */ "auxiliary 
5670: 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20  database format 
5680: 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20  error",..       
5690: 20 2f 2a 20 53 51 4c 49 54 45 5f 52 41 4e 47 45   /* SQLITE_RANGE
56a0: 20 20 20 20 20 20 20 2a 2f 20 22 62 69 6e 64 20         */ "bind 
56b0: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
56c0: 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 2c 0d 0a  out of range",..
56d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
56e0: 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 20 2a 2f  E_NOTADB      */
56f0: 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70   "file is encryp
5700: 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ted or is not a 
5710: 64 61 74 61 62 61 73 65 22 0a 20 20 20 20 7d 3b  database".    };
5720: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
5730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
5790: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
57a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
57b0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   error message f
57c0: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
57d0: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
57e0: 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f  ode using..    /
57f0: 2f 2f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  // the internal 
5800: 73 74 61 74 69 63 20 6c 6f 6f 6b 75 70 20 74 61  static lookup ta
5810: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
5820: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5830: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
5840: 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72 65  c">The SQLite re
5850: 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72 61  turn code.</para
5860: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
5870: 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20 6d  urns>The error m
5880: 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20 69  essage or null i
5890: 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 66  f it cannot be f
58a0: 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ound.</returns>.
58b0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
58c0: 74 69 63 20 73 74 72 69 6e 67 20 46 61 6c 6c 62  tic string Fallb
58d0: 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e  ackGetErrorStrin
58e0: 67 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  g(SQLiteErrorCod
58f0: 65 20 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  e rc)..    {..  
5900: 20 20 20 20 20 20 69 66 20 28 5f 65 72 72 6f 72        if (_error
5910: 4d 65 73 73 61 67 65 73 20 3d 3d 20 6e 75 6c 6c  Messages == null
5920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
5930: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
5940: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
5950: 20 3d 20 28 69 6e 74 29 72 63 3b 0d 0a 0d 0a 20   = (int)rc;.... 
5960: 20 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65         if ((inde
5970: 78 20 3c 20 30 29 20 7c 7c 20 28 69 6e 64 65 78  x < 0) || (index
5980: 20 3e 3d 20 5f 65 72 72 6f 72 4d 65 73 73 61 67   >= _errorMessag
5990: 65 73 2e 4c 65 6e 67 74 68 29 29 0d 0a 20 20 20  es.Length))..   
59a0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d           index =
59b0: 20 28 69 6e 74 29 53 51 4c 69 74 65 45 72 72 6f   (int)SQLiteErro
59c0: 72 43 6f 64 65 2e 45 72 72 6f 72 3b 20 2f 2a 20  rCode.Error; /* 
59d0: 4d 61 6b 65 20 69 6e 74 6f 20 67 65 6e 65 72 69  Make into generi
59e0: 63 20 65 72 72 6f 72 2e 20 2a 2f 0d 0a 0d 0a 20  c error. */.... 
59f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 65         return _e
5a00: 72 72 6f 72 4d 65 73 73 61 67 65 73 5b 69 6e 64  rrorMessages[ind
5a10: 65 78 5d 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ex];.    }....  
5a20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5a30: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
5a40: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
5a50: 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ge for the speci
5a60: 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74 75  fied SQLite retu
5a70: 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20  rn code using.. 
5a80: 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74     /// the sqlit
5a90: 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63  e3_errstr() func
5aa0: 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61  tion, falling ba
5ab0: 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e  ck to the intern
5ac0: 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f  al lookup..    /
5ad0: 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65  // table if nece
5ae0: 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssary...    /// 
5af0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5b00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5b10: 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20  "rc">The SQLite 
5b20: 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61  return code.</pa
5b30: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5b40: 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72  eturns>The error
5b50: 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c   message or null
5b60: 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65   if it cannot be
5b70: 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73   found.</returns
5b80: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
5b90: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
5ba0: 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c  tErrorString(SQL
5bb0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29  iteErrorCode rc)
5bc0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5bd0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
5be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
5bf0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
5c00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5c10: 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63 29  lite3_errstr(rc)
5c20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5c30: 20 69 66 20 28 70 74 72 20 21 3d 20 49 6e 74 50   if (ptr != IntP
5c40: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
5c50: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
5c60: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5c70: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5c80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5c90: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
5ca0: 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23  ingAnsi(ptr);..#
5cb0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
5cd0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 2d  8ToString(ptr, -
5ce0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
5cf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5d00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
5d10: 61 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74  atch (EntryPoint
5d20: 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f  NotFoundExceptio
5d30: 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n)..        {.. 
5d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
5d50: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
5d60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5d70: 72 65 74 75 72 6e 20 46 61 6c 6c 62 61 63 6b 47  return FallbackG
5d80: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 72 63  etErrorString(rc
5d90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5da0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5db0: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
5dc0: 72 72 6f 72 28 53 51 4c 69 74 65 43 6f 6e 6e 65  rror(SQLiteConne
5dd0: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c  ctionHandle hdl,
5de0: 20 49 6e 74 50 74 72 20 64 62 29 0d 0a 20 20 20   IntPtr db)..   
5df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
5e00: 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  (hdl == null) ||
5e10: 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a   (db == IntPtr.Z
5e20: 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
5e30: 20 20 20 72 65 74 75 72 6e 20 22 6e 75 6c 6c 20     return "null 
5e40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 72 20 64 61  connection or da
5e50: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 22 3b 0d  tabase handle";.
5e60: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ...        strin
5e70: 67 20 72 65 73 75 6c 74 20 3d 20 6e 75 6c 6c 3b  g result = null;
5e80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
5e90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5ea0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
5eb0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
5ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
5ed0: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
5ee0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
5ef0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
5f00: 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f     {..#if PLATFO
5f10: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5f20: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
5f30: 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52   lock (hdl.syncR
5f40: 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  oot)..#else..   
5f50: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
5f60: 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  dl)..#endif..   
5f70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5f90: 21 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26  !hdl.IsInvalid &
5fa0: 26 20 21 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29  & !hdl.IsClosed)
5fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5fc0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
5fd0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5ff0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20  nt len;..       
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
6010: 75 6c 74 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ult = UTF8ToStri
6020: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
6030: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
6040: 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28 64 62  rrmsg_interop(db
6050: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
6060: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6080: 73 75 6c 74 20 3d 20 55 54 46 38 54 6f 53 74 72  sult = UTF8ToStr
6090: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
60a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
60b0: 65 72 72 6d 73 67 28 64 62 29 2c 20 2d 31 29 3b  errmsg(db), -1);
60c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
60d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
60f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6110: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
6120: 20 3d 20 22 63 6c 6f 73 65 64 20 6f 72 20 69 6e   = "closed or in
6130: 76 61 6c 69 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  valid connection
6140: 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
6150: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6160: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6180: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 68 64 6c  GC.KeepAlive(hdl
6190: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
61a0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
61b0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
61c0: 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 46 69  l static void Fi
61d0: 6e 69 73 68 42 61 63 6b 75 70 28 53 51 4c 69 74  nishBackup(SQLit
61e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
61f0: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 62 61  e hdl, IntPtr ba
6200: 63 6b 75 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ckup)..    {..  
6210: 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d        if ((hdl =
6220: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 62 61 63 6b  = null) || (back
6230: 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  up == IntPtr.Zer
6240: 6f 29 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20  o)) return;.... 
6250: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
6260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6270: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
6280: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
6290: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
62a0: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
62b0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
62c0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
62d0: 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  .#if PLATFORM_CO
62e0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
6300: 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d   (hdl.syncRoot).
6310: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
6320: 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a      lock (hdl)..
6330: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
6340: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
6350: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
6370: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6380: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6390: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
63a0: 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
63b0: 6f 70 28 62 61 63 6b 75 70 29 3b 0d 0a 23 65 6c  op(backup);..#el
63c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
63d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
63e0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
63f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6400: 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
6410: 68 28 62 61 63 6b 75 70 29 3b 0d 0a 23 65 6e 64  h(backup);..#end
6420: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
6430: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6440: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6450: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6460: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75  eException(n, nu
6470: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
6480: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
6490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
64a0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
64b0: 64 20 46 69 6e 61 6c 69 7a 65 53 74 61 74 65 6d  d FinalizeStatem
64c0: 65 6e 74 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ent(SQLiteConnec
64d0: 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20  tionHandle hdl, 
64e0: 49 6e 74 50 74 72 20 73 74 6d 74 29 0d 0a 20 20  IntPtr stmt)..  
64f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
6500: 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((hdl == null) |
6510: 7c 20 28 73 74 6d 74 20 3d 3d 20 49 6e 74 50 74  | (stmt == IntPt
6520: 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 3b  r.Zero)) return;
6530: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
6540: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6550: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6560: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6570: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
6580: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
6590: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
65a0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
65b0: 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f     {..#if PLATFO
65c0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
65d0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
65e0: 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52   lock (hdl.syncR
65f0: 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  oot)..#else..   
6600: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
6610: 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  dl)..#endif..   
6620: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
6630: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6650: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6660: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6670: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6680: 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72  3_finalize_inter
6690: 6f 70 28 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65  op(stmt);..#else
66a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66b0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
66c0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
66d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
66e0: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29  3_finalize(stmt)
66f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
6700: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
6710: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
6720: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
6730: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
6740: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
6750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6760: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
6770: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
6780: 74 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 43 6f  tic void CloseCo
6790: 6e 6e 65 63 74 69 6f 6e 28 53 51 4c 69 74 65 43  nnection(SQLiteC
67a0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
67b0: 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d  hdl, IntPtr db).
67c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
67d0: 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c  if ((hdl == null
67e0: 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50  ) || (db == IntP
67f0: 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e  tr.Zero)) return
6800: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
6810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6820: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
6830: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
6840: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
6850: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
6860: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
6870: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
6880: 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46      {..#if PLATF
6890: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
68a0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
68b0: 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63    lock (hdl.sync
68c0: 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  Root)..#else..  
68d0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
68e0: 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  hdl)..#endif..  
68f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
6900: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
6910: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
6920: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6930: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
6940: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6950: 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  e3_close_interop
6960: 28 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  (db);..#else..  
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6980: 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 68 64  setConnection(hd
6990: 6c 2c 20 64 62 2c 20 66 61 6c 73 65 29 3b 0d 0a  l, db, false);..
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69b0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
69c0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
69d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
69e0: 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 23 65  3_close(db);..#e
69f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6a00: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
6a10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6a20: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
6a30: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
6a40: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68 64 6c  GetLastError(hdl
6a50: 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20 20 20  , db));..       
6a60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6a70: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  }..    }....#if 
6a80: 21 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f  !INTEROP_LEGACY_
6a90: 43 4c 4f 53 45 0d 0a 20 20 20 20 69 6e 74 65 72  CLOSE..    inter
6aa0: 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20  nal static void 
6ab0: 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 56  CloseConnectionV
6ac0: 32 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  2(SQLiteConnecti
6ad0: 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e  onHandle hdl, In
6ae0: 74 50 74 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d  tPtr db)..    {.
6af0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64  .        if ((hd
6b00: 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64  l == null) || (d
6b10: 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
6b20: 29 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20  )) return;....  
6b30: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
6b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6b50: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
6b60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6b70: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
6b80: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
6b90: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
6ba0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
6bb0: 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
6bc0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
6bd0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
6be0: 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a  (hdl.syncRoot)..
6bf0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
6c00: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23     lock (hdl)..#
6c10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
6c20: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
6c30: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6c50: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6c60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6c70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73  ods.sqlite3_clos
6c80: 65 5f 69 6e 74 65 72 6f 70 28 64 62 29 3b 0d 0a  e_interop(db);..
6c90: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
6ca0: 20 20 20 20 20 20 20 52 65 73 65 74 43 6f 6e 6e         ResetConn
6cb0: 65 63 74 69 6f 6e 28 68 64 6c 2c 20 64 62 2c 20  ection(hdl, db, 
6cc0: 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  false);....     
6cd0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6ce0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6cf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6d00: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ds.sqlite3_close
6d10: 5f 76 32 28 64 62 29 3b 0d 0a 23 65 6e 64 69 66  _v2(db);..#endif
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d30: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
6d40: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
6d50: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6d60: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
6d70: 61 73 74 45 72 72 6f 72 28 68 64 6c 2c 20 64 62  astError(hdl, db
6d80: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
6d90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
6da0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
6db0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
6dc0: 74 69 63 20 62 6f 6f 6c 20 52 65 73 65 74 43 6f  tic bool ResetCo
6dd0: 6e 6e 65 63 74 69 6f 6e 28 53 51 4c 69 74 65 43  nnection(SQLiteC
6de0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
6df0: 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 2c 20  hdl, IntPtr db, 
6e00: 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a  bool canThrow)..
6e10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
6e20: 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29  f ((hdl == null)
6e30: 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50 74   || (db == IntPt
6e40: 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 20  r.Zero)) return 
6e50: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
6e60: 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74 20 3d 20    bool result = 
6e70: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
6e80: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
6e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6ea0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
6eb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6ec0: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
6ed0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
6ee0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
6ef0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
6f00: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6f10: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6f20: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c         lock (hdl
6f30: 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73  .syncRoot)..#els
6f40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  e..            l
6f50: 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69  ock (hdl)..#endi
6f60: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
6f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6f80: 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26    if (canThrow &
6f90: 26 20 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64 29  & hdl.IsInvalid)
6fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fb0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
6fc0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
6fd0: 45 78 63 65 70 74 69 6f 6e 28 22 54 68 65 20 63  Exception("The c
6fe0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
6ff0: 20 69 73 20 69 6e 76 61 6c 69 64 2e 22 29 3b 0d   is invalid.");.
7000: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7010: 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20     if (canThrow 
7020: 26 26 20 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29  && hdl.IsClosed)
7030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7040: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7050: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
7060: 45 78 63 65 70 74 69 6f 6e 28 22 54 68 65 20 63  Exception("The c
7070: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7080: 20 69 73 20 63 6c 6f 73 65 64 2e 22 29 3b 0d 0a   is closed.");..
7090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
70a0: 20 20 69 66 20 28 21 68 64 6c 2e 49 73 49 6e 76    if (!hdl.IsInv
70b0: 61 6c 69 64 20 26 26 20 21 68 64 6c 2e 49 73 43  alid && !hdl.IsC
70c0: 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  losed)..        
70d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
70f0: 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74  ntPtr stmt = Int
7100: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7120: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7130: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7140: 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20 20 20           do..   
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7160: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7170: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
7180: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7190: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6e  ethods.sqlite3_n
71a0: 65 78 74 5f 73 74 6d 74 28 64 62 2c 20 73 74 6d  ext_stmt(db, stm
71b0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
71d0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
71e0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7200: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
7210: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7230: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7240: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7250: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
7260: 70 28 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d  p(stmt);..#else.
7270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
7290: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
72a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
72b0: 65 74 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  et(stmt);..#endi
72c0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
72d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72f0: 20 20 7d 20 77 68 69 6c 65 20 28 73 74 6d 74 20    } while (stmt 
7300: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  != IntPtr.Zero);
7310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7320: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7340: 2f 2f 20 4e 4f 54 45 3a 20 49 73 20 61 20 74 72  // NOTE: Is a tr
7350: 61 6e 73 61 63 74 69 6f 6e 20 4e 4f 54 20 70 65  ansaction NOT pe
7360: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 63 6f 6e  nding on the con
7370: 6e 65 63 74 69 6f 6e 3f 0d 0a 20 20 20 20 20 20  nection?..      
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73a0: 20 20 20 20 20 20 69 66 20 28 49 73 41 75 74 6f        if (IsAuto
73b0: 63 6f 6d 6d 69 74 28 68 64 6c 2c 20 64 62 29 29  commit(hdl, db))
73c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73f0: 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65 3b 0d   result = true;.
7400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7420: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
7430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7440: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7460: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7470: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7480: 5f 65 78 65 63 28 0d 0a 20 20 20 20 20 20 20 20  _exec(..        
7490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74a0: 20 20 20 20 64 62 2c 20 54 6f 55 54 46 38 28 22      db, ToUTF8("
74b0: 52 4f 4c 4c 42 41 43 4b 22 29 2c 20 49 6e 74 50  ROLLBACK"), IntP
74c0: 74 72 2e 5a 65 72 6f 2c 20 49 6e 74 50 74 72 2e  tr.Zero, IntPtr.
74d0: 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20  Zero,..         
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 20 20 20 6f 75 74 20 73 74 6d 74 29 3b 0d 0a 0d     out stmt);...
7500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7510: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
7520: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7530: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7570: 73 75 6c 74 20 3d 20 74 72 75 65 3b 0d 0a 20 20  sult = true;..  
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7590: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75b0: 20 65 6c 73 65 20 69 66 20 28 63 61 6e 54 68 72   else if (canThr
75c0: 6f 77 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow)..           
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
7600: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7610: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
7620: 45 72 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b  Error(hdl, db));
7630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7640: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7670: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7680: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
7690: 0a 20 20 20 20 20 20 20 20 47 43 2e 4b 65 65 70  .        GC.Keep
76a0: 41 6c 69 76 65 28 68 64 6c 29 3b 0d 0a 20 20 20  Alive(hdl);..   
76b0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
76c0: 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
76d0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
76e0: 63 20 62 6f 6f 6c 20 49 73 41 75 74 6f 63 6f 6d  c bool IsAutocom
76f0: 6d 69 74 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mit(SQLiteConnec
7700: 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20  tionHandle hdl, 
7710: 49 6e 74 50 74 72 20 64 62 29 0d 0a 20 20 20 20  IntPtr db)..    
7720: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  {..        if ((
7730: 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  hdl == null) || 
7740: 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  (db == IntPtr.Ze
7750: 72 6f 29 29 20 72 65 74 75 72 6e 20 66 61 6c 73  ro)) return fals
7760: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f  e;....        bo
7770: 6f 6c 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73  ol result = fals
7780: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  e;....        tr
7790: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
77a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
77b0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
77c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
77d0: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
77e0: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
77f0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
7800: 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54       {..#if PLAT
7810: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
7820: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
7830: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e     lock (hdl.syn
7840: 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20  cRoot)..#else.. 
7850: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
7860: 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  (hdl)..#endif.. 
7870: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7890: 20 28 21 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64   (!hdl.IsInvalid
78a0: 20 26 26 20 21 68 64 6c 2e 49 73 43 6c 6f 73 65   && !hdl.IsClose
78b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
78c0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
78d0: 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65   (UnsafeNativeMe
78e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 67 65  thods.sqlite3_ge
78f0: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29  t_autocommit(db)
7900: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 20   == 1);..       
7910: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7920: 7d 0d 0a 20 20 20 20 20 20 20 20 47 43 2e 4b 65  }..        GC.Ke
7930: 65 70 41 6c 69 76 65 28 68 64 6c 29 3b 20 2f 2a  epAlive(hdl); /*
7940: 20 4e 4f 54 45 3a 20 55 6e 72 65 61 63 68 61 62   NOTE: Unreachab
7950: 6c 65 20 63 6f 64 65 2e 20 2a 2f 0d 0a 20 20 20  le code. */..   
7960: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
7970: 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  lt;..    }..  }.
7980: 0a 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e  ...  internal in
7990: 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 53  terface ISQLiteS
79a0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 0d  chemaExtensions.
79b0: 0a 20 20 7b 0d 0a 20 20 20 20 76 6f 69 64 20 42  .  {..    void B
79c0: 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 53  uildTempSchema(S
79d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
79e0: 63 6e 6e 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  cnn);..  }....  
79f0: 5b 46 6c 61 67 73 5d 0d 0a 20 20 69 6e 74 65 72  [Flags]..  inter
7a00: 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 4f  nal enum SQLiteO
7a10: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 0d 0a 20 20  penFlagsEnum..  
7a20: 7b 0d 0a 20 20 20 20 4e 6f 6e 65 20 3d 20 30 2c  {..    None = 0,
7a30: 0d 0a 20 20 20 20 52 65 61 64 4f 6e 6c 79 20 3d  ..    ReadOnly =
7a40: 20 30 78 30 31 2c 0d 0a 20 20 20 20 52 65 61 64   0x01,..    Read
7a50: 57 72 69 74 65 20 3d 20 30 78 30 32 2c 0d 0a 20  Write = 0x02,.. 
7a60: 20 20 20 43 72 65 61 74 65 20 3d 20 30 78 30 34     Create = 0x04
7a70: 2c 0d 0a 20 20 20 20 55 72 69 20 3d 20 30 78 34  ,..    Uri = 0x4
7a80: 30 2c 0d 0a 20 20 20 20 53 68 61 72 65 64 43 61  0,..    SharedCa
7a90: 63 68 65 20 3d 20 30 78 30 31 30 30 30 30 30 30  che = 0x01000000
7aa0: 2c 0d 0a 20 20 20 20 44 65 66 61 75 6c 74 20 3d  ,..    Default =
7ab0: 20 30 78 30 36 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20   0x06,..  }.... 
7ac0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7ad0: 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20    /// The extra 
7ae0: 62 65 68 61 76 69 6f 72 61 6c 20 66 6c 61 67 73  behavioral flags
7af0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 61 70 70   that can be app
7b00: 6c 69 65 64 20 74 6f 20 61 20 63 6f 6e 6e 65 63  lied to a connec
7b10: 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  tion...  /// </s
7b20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 5b 46 6c 61 67  ummary>..  [Flag
7b30: 73 28 29 5d 0d 0a 20 20 70 75 62 6c 69 63 20 65  s()]..  public e
7b40: 6e 75 6d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  num SQLiteConnec
7b50: 74 69 6f 6e 46 6c 61 67 73 0d 0a 20 20 7b 0d 0a  tionFlags..  {..
7b60: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
7b70: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e  ry>..      /// N
7b80: 6f 20 65 78 74 72 61 20 66 6c 61 67 73 2e 0d 0a  o extra flags...
7b90: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
7ba0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e 65  ary>..      None
7bb0: 20 3d 20 30 78 30 2c 0d 0a 0d 0a 20 20 20 20 20   = 0x0,....     
7bc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7bd0: 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65        /// Enable
7be0: 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20   logging of all 
7bf0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 74  SQL statements t
7c00: 6f 20 62 65 20 70 72 65 70 61 72 65 64 2e 0d 0a  o be prepared...
7c10: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
7c20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 50  ary>..      LogP
7c30: 72 65 70 61 72 65 20 3d 20 30 78 31 2c 0d 0a 0d  repare = 0x1,...
7c40: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
7c50: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
7c60: 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f  Enable logging o
7c70: 66 20 61 6c 6c 20 62 6f 75 6e 64 20 70 61 72 61  f all bound para
7c80: 6d 65 74 65 72 20 74 79 70 65 73 20 61 6e 64 20  meter types and 
7c90: 72 61 77 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  raw values...   
7ca0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7cb0: 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 50 72 65 42  >..      LogPreB
7cc0: 69 6e 64 20 3d 20 30 78 32 2c 0d 0a 0d 0a 20 20  ind = 0x2,....  
7cd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7ce0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61  >..      /// Ena
7cf0: 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61  ble logging of a
7d00: 6c 6c 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  ll bound paramet
7d10: 65 72 20 73 74 72 6f 6e 67 6c 79 20 74 79 70 65  er strongly type
7d20: 64 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20  d values...     
7d30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7d40: 0a 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 20 3d  .      LogBind =
7d50: 20 30 78 34 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   0x4,....      /
7d60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7d70: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c      /// Enable l
7d80: 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20 65 78  ogging of all ex
7d90: 63 65 70 74 69 6f 6e 73 20 63 61 75 67 68 74 20  ceptions caught 
7da0: 66 72 6f 6d 20 75 73 65 72 2d 70 72 6f 76 69 64  from user-provid
7db0: 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6d 61  ed..      /// ma
7dc0: 6e 61 67 65 64 20 63 6f 64 65 20 63 61 6c 6c 65  naged code calle
7dd0: 64 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63 6f  d from native co
7de0: 64 65 20 76 69 61 20 64 65 6c 65 67 61 74 65 73  de via delegates
7df0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
7e00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c  ummary>..      L
7e10: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74  ogCallbackExcept
7e20: 69 6f 6e 20 3d 20 30 78 38 2c 0d 0a 0d 0a 20 20  ion = 0x8,....  
7e30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7e40: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61  >..      /// Ena
7e50: 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 62  ble logging of b
7e60: 61 63 6b 75 70 20 41 50 49 20 65 72 72 6f 72 73  ackup API errors
7e70: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
7e80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c  ummary>..      L
7e90: 6f 67 42 61 63 6b 75 70 20 3d 20 30 78 31 30 2c  ogBackup = 0x10,
7ea0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
7eb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
7ec0: 2f 2f 20 53 6b 69 70 20 61 64 64 69 6e 67 20 74  // Skip adding t
7ed0: 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 75 6e  he extension fun
7ee0: 63 74 69 6f 6e 73 20 70 72 6f 76 69 64 65 64 20  ctions provided 
7ef0: 62 79 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  by the native.. 
7f00: 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 6f 70       /// interop
7f10: 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...    
7f20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7f30: 0d 0a 20 20 20 20 20 20 4e 6f 45 78 74 65 6e 73  ..      NoExtens
7f40: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 20 3d 20 30  ionFunctions = 0
7f50: 78 32 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  x20,....      //
7f60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7f70: 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69 6e 64     /// When bind
7f80: 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20 76 61  ing parameter va
7f90: 6c 75 65 73 20 77 69 74 68 20 74 68 65 20 3c 73  lues with the <s
7fa0: 65 65 20 63 72 65 66 3d 22 55 49 6e 74 33 32 22  ee cref="UInt32"
7fb0: 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74   />..      /// t
7fc0: 79 70 65 2c 20 75 73 65 20 74 68 65 20 69 6e 74  ype, use the int
7fd0: 65 72 6f 70 20 6d 65 74 68 6f 64 20 74 68 61 74  erop method that
7fe0: 20 61 63 63 65 70 74 73 20 61 6e 20 3c 73 65 65   accepts an <see
7ff0: 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e   cref="Int64" />
8000: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75  ..      /// valu
8010: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
8020: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8030: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
8040: 34 20 3d 20 30 78 34 30 2c 0d 0a 0d 0a 20 20 20  4 = 0x40,....   
8050: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8060: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
8070: 6c 65 20 61 6c 6c 20 6c 6f 67 67 69 6e 67 2e 0d  le all logging..
8080: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
8090: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67  mary>..      Log
80a0: 41 6c 6c 20 3d 20 4c 6f 67 50 72 65 70 61 72 65  All = LogPrepare
80b0: 20 7c 20 4c 6f 67 50 72 65 42 69 6e 64 20 7c 20   | LogPreBind | 
80c0: 4c 6f 67 42 69 6e 64 20 7c 0d 0a 20 20 20 20 20  LogBind |..     
80d0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 43 61 6c            LogCal
80e0: 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 20 7c  lbackException |
80f0: 20 4c 6f 67 42 61 63 6b 75 70 2c 0d 0a 0d 0a 20   LogBackup,.... 
8100: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
8110: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
8120: 65 20 64 65 66 61 75 6c 74 20 65 78 74 72 61 20  e default extra 
8130: 66 6c 61 67 73 20 66 6f 72 20 6e 65 77 20 63 6f  flags for new co
8140: 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  nnections...    
8150: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8160: 0d 0a 20 20 20 20 20 20 44 65 66 61 75 6c 74 20  ..      Default 
8170: 3d 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63  = LogCallbackExc
8180: 65 70 74 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20  eption..  }.... 
8190: 20 2f 2f 20 54 68 65 73 65 20 61 72 65 20 74 68   // These are th
81a0: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 20 74 68 65  e options to the
81b0: 20 69 6e 74 65 72 6e 61 6c 20 73 71 6c 69 74 65   internal sqlite
81c0: 33 5f 63 6f 6e 66 69 67 20 63 61 6c 6c 2e 0d 0a  3_config call...
81d0: 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20    internal enum 
81e0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
81f0: 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 53 51  num..  {..    SQ
8200: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45  LITE_CONFIG_NONE
8210: 20 3d 20 30 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20   = 0, // nil .. 
8220: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
8230: 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 20 3d 20  _SINGLETHREAD = 
8240: 31 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20  1, // nil ..    
8250: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
8260: 4c 54 49 54 48 52 45 41 44 20 3d 20 32 2c 20 2f  LTITHREAD = 2, /
8270: 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49  / nil ..    SQLI
8280: 54 45 5f 43 4f 4e 46 49 47 5f 53 45 52 49 41 4c  TE_CONFIG_SERIAL
8290: 49 5a 45 44 20 3d 20 33 2c 20 2f 2f 20 6e 69 6c  IZED = 3, // nil
82a0: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
82b0: 4e 46 49 47 5f 4d 41 4c 4c 4f 43 20 3d 20 34 2c  NFIG_MALLOC = 4,
82c0: 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f   // sqlite3_mem_
82d0: 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53  methods* ..    S
82e0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54  QLITE_CONFIG_GET
82f0: 4d 41 4c 4c 4f 43 20 3d 20 35 2c 20 2f 2f 20 73  MALLOC = 5, // s
8300: 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
8310: 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  ds* ..    SQLITE
8320: 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54 43 48 20  _CONFIG_SCRATCH 
8330: 3d 20 36 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20 69  = 6, // void*, i
8340: 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 20 0d 0a 20  nt sz, int N .. 
8350: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
8360: 5f 50 41 47 45 43 41 43 48 45 20 3d 20 37 2c 20  _PAGECACHE = 7, 
8370: 2f 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a  // void*, int sz
8380: 2c 20 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51  , int N ..    SQ
8390: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50  LITE_CONFIG_HEAP
83a0: 20 3d 20 38 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20   = 8, // void*, 
83b0: 69 6e 74 20 6e 42 79 74 65 2c 20 69 6e 74 20 6d  int nByte, int m
83c0: 69 6e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  in ..    SQLITE_
83d0: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
83e0: 20 3d 20 39 2c 20 2f 2f 20 62 6f 6f 6c 65 61 6e   = 9, // boolean
83f0: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
8400: 4e 46 49 47 5f 4d 55 54 45 58 20 3d 20 31 30 2c  NFIG_MUTEX = 10,
8410: 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   // sqlite3_mute
8420: 78 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20  x_methods* ..   
8430: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47   SQLITE_CONFIG_G
8440: 45 54 4d 55 54 45 58 20 3d 20 31 31 2c 20 2f 2f  ETMUTEX = 11, //
8450: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
8460: 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 2f 2f  ethods* ..    //
8470: 20 70 72 65 76 69 6f 75 73 6c 79 20 53 51 4c 49   previously SQLI
8480: 54 45 5f 43 4f 4e 46 49 47 5f 43 48 55 4e 4b 41  TE_CONFIG_CHUNKA
8490: 4c 4c 4f 43 20 31 32 20 77 68 69 63 68 20 69 73  LLOC 12 which is
84a0: 20 6e 6f 77 20 75 6e 75 73 65 64 0d 0a 20 20 20   now unused..   
84b0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c   SQLITE_CONFIG_L
84c0: 4f 4f 4b 41 53 49 44 45 20 3d 20 31 33 2c 20 2f  OOKASIDE = 13, /
84d0: 2f 20 69 6e 74 20 69 6e 74 20 0d 0a 20 20 20 20  / int int ..    
84e0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43  SQLITE_CONFIG_PC
84f0: 41 43 48 45 20 3d 20 31 34 2c 20 2f 2f 20 73 71  ACHE = 14, // sq
8500: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
8510: 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49  hods* ..    SQLI
8520: 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41  TE_CONFIG_GETPCA
8530: 43 48 45 20 3d 20 31 35 2c 20 2f 2f 20 73 71 6c  CHE = 15, // sql
8540: 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
8550: 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54  ods* ..    SQLIT
8560: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 20 3d 20 31  E_CONFIG_LOG = 1
8570: 36 2c 20 2f 2f 20 78 46 75 6e 63 2c 20 76 6f 69  6, // xFunc, voi
8580: 64 2a 20 0d 0a 20 20 7d 0d 0a 0d 0a 7d 0d 0a     d* ..  }....}..