System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bd64f89c8ebaedbf799616b954493db256092065:


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 23 72  ble..  {..    #r
0320: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
0330: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 2f 2f 2f  nstants..    ///
0340: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0350: 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 63 6f  /// The error co
0360: 64 65 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67  de used for logg
0370: 69 6e 67 20 65 78 63 65 70 74 69 6f 6e 73 20 63  ing exceptions c
0380: 61 75 67 68 74 20 69 6e 20 75 73 65 72 2d 70 72  aught in user-pr
0390: 6f 76 69 64 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ovided..    /// 
03a0: 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
03b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
03c0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 69 6e  nternal const in
03d0: 74 20 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f  t COR_E_EXCEPTIO
03e0: 4e 20 3d 20 75 6e 63 68 65 63 6b 65 64 28 28 69  N = unchecked((i
03f0: 6e 74 29 30 78 38 30 31 33 31 35 30 30 29 3b 0d  nt)0x80131500);.
0400: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
0410: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
0420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
0470: 20 53 51 4c 69 74 65 42 61 73 65 28 53 51 4c 69   SQLiteBase(SQLi
0480: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0490: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
04a0: 6b 69 6e 64 2c 20 73 74 72 69 6e 67 20 66 6d 74  kind, string fmt
04b0: 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 20 20 3a  String)..      :
04c0: 20 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c   base(fmt, kind,
04d0: 20 66 6d 74 53 74 72 69 6e 67 29 20 7b 20 7d 0d   fmtString) { }.
04e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
04f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
0500: 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 72  turns a string r
0510: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
0520: 61 63 74 69 76 65 20 76 65 72 73 69 6f 6e 20 6f  active version o
0530: 66 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f  f SQLite..    //
0540: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0550: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
0560: 61 63 74 20 73 74 72 69 6e 67 20 56 65 72 73 69  act string Versi
0570: 6f 6e 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  on { get; }..   
0580: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0590: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
05a0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
05b0: 73 65 6e 74 69 6e 67 20 74 68 65 20 61 63 74 69  senting the acti
05c0: 76 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ve version of SQ
05d0: 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  Lite..    /// </
05e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
05f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0600: 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65  int VersionNumbe
0610: 72 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20  r { 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 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
0650: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 75 63 63  most recent succ
0660: 65 73 73 66 75 6c 20 49 4e 53 45 52 54 20 69 6e  essful INSERT in
0670: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
0680: 66 72 6f 6d 20 74 68 69 73 20 63 6f 6e 6e 65 63  from this connec
0690: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
06a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
06b0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
06c0: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
06d0: 52 6f 77 49 64 20 7b 20 67 65 74 3b 20 7d 0d 0a  RowId { get; }..
06e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
06f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
0700: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
0710: 20 63 68 61 6e 67 65 73 20 74 68 65 20 6c 61 73   changes the las
0720: 74 20 65 78 65 63 75 74 69 6e 67 20 69 6e 73 65  t executing inse
0730: 72 74 2f 75 70 64 61 74 65 20 63 61 75 73 65 64  rt/update caused
0740: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0750: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
0760: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
0770: 20 43 68 61 6e 67 65 73 20 7b 20 67 65 74 3b 20   Changes { get; 
0780: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0790: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
07a0: 74 75 72 6e 73 20 74 68 65 20 61 6d 6f 75 6e 74  turns the amount
07b0: 20 6f 66 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62   of memory (in b
07c0: 79 74 65 73 29 20 63 75 72 72 65 6e 74 6c 79 20  ytes) currently 
07d0: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 53 51  in use by the SQ
07e0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
07f0: 79 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  y.  This is not 
0800: 72 65 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e  really a per-con
0810: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  nection..    ///
0820: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 67 6c   value, it is gl
0830: 6f 62 61 6c 20 74 6f 20 74 68 65 20 70 72 6f 63  obal to the proc
0840: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
0850: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
0860: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0870: 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 20  long MemoryUsed 
0880: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
0890: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
08a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
08b0: 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20   maximum amount 
08c0: 6f 66 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79  of memory (in by
08d0: 74 65 73 29 20 75 73 65 64 20 62 79 20 74 68 65  tes) used by the
08e0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
08f0: 72 61 72 79 20 73 69 6e 63 65 20 74 68 65 20 68  rary since the h
0900: 69 67 68 2d 77 61 74 65 72 20 6d 61 72 6b 20 77  igh-water mark w
0910: 61 73 20 6c 61 73 74 20 72 65 73 65 74 2e 0d 0a  as last reset...
0920: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
0930: 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70 65 72  not really a per
0940: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76 61 6c 75  -connection valu
0950: 65 2c 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20  e, it is global 
0960: 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d  to the process..
0970: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0980: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
0990: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
09a0: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 20  MemoryHighwater 
09b0: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
09c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
09d0: 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 73 74   /// Sets the st
09e0: 61 74 75 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  atus of the memo
09f0: 72 79 20 75 73 61 67 65 20 74 72 61 63 6b 69 6e  ry usage trackin
0a00: 67 20 73 75 62 73 79 73 74 65 6d 20 69 6e 20 74  g subsystem in t
0a10: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0a20: 69 62 72 61 72 79 2e 20 20 42 79 20 64 65 66 61  ibrary.  By defa
0a30: 75 6c 74 2c 20 74 68 69 73 20 69 73 20 65 6e 61  ult, this is ena
0a40: 62 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  bled...    /// I
0a50: 66 20 74 68 69 73 20 69 73 20 64 69 73 61 62 6c  f this is disabl
0a60: 65 64 2c 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  ed, memory usage
0a70: 20 74 72 61 63 6b 69 6e 67 20 77 69 6c 6c 20 6e   tracking will n
0a80: 6f 74 20 62 65 20 70 65 72 66 6f 72 6d 65 64 2e  ot be performed.
0a90: 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 72 65    This is not re
0aa0: 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65  ally a per-conne
0ab0: 63 74 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74 20  ction value, it 
0ac0: 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 67 6c 6f 62  is..    /// glob
0ad0: 61 6c 20 74 6f 20 74 68 65 20 70 72 6f 63 65 73  al to the proces
0ae0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
0af0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0b00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
0b10: 75 65 22 3e 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  ue">Non-zero to 
0b20: 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 75 73  enable memory us
0b30: 61 67 65 20 74 72 61 63 6b 69 6e 67 2c 20 7a 65  age tracking, ze
0b40: 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 70  ro otherwise.</p
0b50: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0b60: 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61  returns>A standa
0b70: 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
0b80: 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f   code (i.e. zero
0b90: 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64   for success and
0ba0: 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61   non-zero for fa
0bb0: 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73  ilure).</returns
0bc0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0bd0: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
0be0: 72 72 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f  rrorCode SetMemo
0bf0: 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61  ryStatus(bool va
0c00: 6c 75 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lue);..    /// <
0c10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c20: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
0c30: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
0c40: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
0c50: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
0c60: 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f  fferent config o
0c70: 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ptions...    ///
0c80: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
0c90: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
0ca0: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
0cb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cc0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0cd0: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
0ce0: 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77  rrorCode Shutdow
0cf0: 6e 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  n();..    /// <s
0d00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0d10: 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   Returns non-zer
0d20: 6f 20 69 66 20 61 20 64 61 74 61 62 61 73 65 20  o if a database 
0d30: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 6f 70  connection is op
0d40: 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  en...    /// </s
0d50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0d60: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
0d70: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
0d80: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
0d90: 20 49 73 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20   IsOpen();..    
0da0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0db0: 20 20 20 2f 2f 2f 20 4f 70 65 6e 73 20 61 20 64     /// Opens a d
0dc0: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f  atabase...    //
0dd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0de0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
0df0: 0a 20 20 20 20 2f 2f 2f 20 49 6d 70 6c 65 6d 65  .    /// Impleme
0e00: 6e 74 65 72 73 20 73 68 6f 75 6c 64 20 63 61 6c  nters should cal
0e10: 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  l SQLiteFunction
0e20: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29  .BindFunctions()
0e30: 20 61 6e 64 20 73 61 76 65 20 74 68 65 20 61 72   and save the ar
0e40: 72 61 79 20 61 66 74 65 72 20 6f 70 65 6e 69 6e  ray after openin
0e50: 67 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  g a connection..
0e60: 20 20 20 20 2f 2f 2f 20 74 6f 20 62 69 6e 64 20      /// to bind 
0e70: 61 6c 6c 20 61 74 74 72 69 62 75 74 65 64 20 75  all attributed u
0e80: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0e90: 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74  tions and collat
0ea0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f  ing sequences to
0eb0: 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74   the new connect
0ec0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
0ed0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
0ee0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
0ef0: 74 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68 65 20  trFilename">The 
0f00: 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20  filename of the 
0f10: 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70 65 6e  database to open
0f20: 2e 20 20 53 51 4c 69 74 65 20 61 75 74 6f 6d 61  .  SQLite automa
0f30: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 73 20  tically creates 
0f40: 69 74 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  it if it doesn't
0f50: 20 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d 3e 0d   exist.</param>.
0f60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f70: 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e  name="connection
0f80: 46 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73  Flags">The flags
0f90: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0fa0: 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
0fb0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 3c 2f 70  ection object</p
0fc0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0fd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 65 6e  param name="open
0fe0: 46 6c 61 67 73 22 3e 54 68 65 20 6f 70 65 6e 20  Flags">The open 
0ff0: 66 6c 61 67 73 20 74 6f 20 75 73 65 20 77 68 65  flags to use whe
1000: 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 63  n creating the c
1010: 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 70 61 72 61 6d  onnection</param
1020: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1030: 6d 20 6e 61 6d 65 3d 22 6d 61 78 50 6f 6f 6c 53  m name="maxPoolS
1040: 69 7a 65 22 3e 54 68 65 20 6d 61 78 69 6d 75 6d  ize">The maximum
1050: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 70 6f 6f   size of the poo
1060: 6c 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20  l for the given 
1070: 66 69 6c 65 6e 61 6d 65 3c 2f 70 61 72 61 6d 3e  filename</param>
1080: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1090: 20 6e 61 6d 65 3d 22 75 73 65 50 6f 6f 6c 22 3e   name="usePool">
10a0: 49 66 20 74 72 75 65 2c 20 74 68 65 20 63 6f 6e  If true, the con
10b0: 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 70  nection can be p
10c0: 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 63  ulled from the c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 3c 2f  onnection pool</
10e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
10f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1100: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
1110: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69  trFilename, SQLi
1120: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1130: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
1140: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
1150: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
1160: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
1170: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
1180: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
1190: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c  ary>..    /// Cl
11a0: 6f 73 65 73 20 74 68 65 20 63 75 72 72 65 6e 74  oses the current
11b0: 6c 79 2d 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly-open database
11c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
11d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11e0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
11f0: 2f 20 41 66 74 65 72 20 74 68 65 20 64 61 74 61  / After the data
1200: 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 63 6c  base has been cl
1210: 6f 73 65 64 20 69 6d 70 6c 65 6d 65 74 65 72 73  osed implemeters
1220: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51 4c   should call SQL
1230: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
1240: 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20 74 6f  ndFunctions() to
1250: 20 64 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c 20   deallocate all 
1260: 69 6e 74 65 72 6f 70 20 61 6c 6c 6f 63 61 74 65  interop allocate
1270: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72  d..    /// memor
1280: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1290: 68 20 74 68 65 20 75 73 65 72 2d 64 65 66 69 6e  h the user-defin
12a0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64  ed functions and
12b0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12c0: 6e 63 65 73 20 74 69 65 64 20 74 6f 20 74 68 65  nces tied to the
12d0: 20 63 6c 6f 73 65 64 20 63 6f 6e 6e 65 63 74 69   closed connecti
12e0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  on...    /// </r
12f0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
1300: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
1310: 6e 54 68 72 6f 77 22 3e 4e 6f 6e 2d 7a 65 72 6f  nThrow">Non-zero
1320: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
1330: 6e 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  n is allowed to 
1340: 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73  throw exceptions
1350: 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  , zero otherwise
1360: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
1370: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1380: 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c   void Close(bool
1390: 20 63 61 6e 54 68 72 6f 77 29 3b 0d 0a 20 20 20   canThrow);..   
13a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
13b0: 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65      /// Sets the
13c0: 20 62 75 73 79 20 74 69 6d 65 6f 75 74 20 6f 6e   busy timeout on
13d0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
13e0: 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20    SQLiteCommand 
13f0: 77 69 6c 6c 20 63 61 6c 6c 20 74 68 69 73 20 62  will call this b
1400: 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
1410: 61 6e 79 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20  any command...  
1420: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1430: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1440: 20 6e 61 6d 65 3d 22 6e 54 69 6d 65 6f 75 74 4d   name="nTimeoutM
1450: 53 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  S">The number of
1460: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 74 6f   milliseconds to
1470: 20 77 61 69 74 20 62 65 66 6f 72 65 20 72 65 74   wait before ret
1480: 75 72 6e 69 6e 67 20 53 51 4c 49 54 45 5f 42 55  urning SQLITE_BU
1490: 53 59 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  SY</param>..    
14a0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
14b0: 74 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75  t void SetTimeou
14c0: 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53  t(int nTimeoutMS
14d0: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
14e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
14f0: 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
1500: 6f 66 20 74 68 65 20 6c 61 73 74 20 65 72 72 6f  of the last erro
1510: 72 20 69 73 73 75 65 64 20 62 79 20 53 51 4c 69  r issued by SQLi
1520: 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  te..    /// </su
1530: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1540: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
1550: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1560: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
1570: 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  g GetLastError()
1580: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
1590: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
15a0: 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20  When pooling is 
15b0: 65 6e 61 62 6c 65 64 2c 20 66 6f 72 63 65 20 74  enabled, force t
15c0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  his connection t
15d0: 6f 20 62 65 20 64 69 73 70 6f 73 65 64 20 72 61  o be disposed ra
15e0: 74 68 65 72 20 74 68 61 6e 20 72 65 74 75 72 6e  ther than return
15f0: 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 0d 0a  ed to the pool..
1600: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1610: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
1620: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43   abstract void C
1630: 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20  learPool();.... 
1640: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1650: 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 70  ..    /// When p
1660: 6f 6f 6c 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  ooling is enable
1670: 64 2c 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  d, returns the n
1680: 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c 20 65 6e  umber of pool en
1690: 74 72 69 65 73 20 6d 61 74 63 68 69 6e 67 20 74  tries matching t
16a0: 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65 20  he current file 
16b0: 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  name...    /// <
16c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
16d0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
16e0: 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c 20 65  number of pool e
16f0: 6e 74 72 69 65 73 20 6d 61 74 63 68 69 6e 67 20  ntries matching 
1700: 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65  the current file
1710: 20 6e 61 6d 65 2e 3c 2f 72 65 74 75 72 6e 73 3e   name.</returns>
1720: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
1730: 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f 75 6e  bstract int Coun
1740: 74 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20  tPool();....    
1750: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1760: 20 20 20 2f 2f 2f 20 50 72 65 70 61 72 65 73 20     /// Prepares 
1770: 61 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  a SQL statement 
1780: 66 6f 72 20 65 78 65 63 75 74 69 6f 6e 2e 0d 0a  for execution...
1790: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
17a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
17b0: 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22 3e 54 68  am name="cnn">Th
17c0: 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74  e source connect
17d0: 69 6f 6e 20 70 72 65 70 61 72 69 6e 67 20 74 68  ion preparing th
17e0: 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43 61 6e 20  e command.  Can 
17f0: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61 6e 79 20  be null for any 
1800: 63 61 6c 6c 65 72 20 65 78 63 65 70 74 20 4c 49  caller except LI
1810: 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  NQ</param>..    
1820: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1830: 22 73 74 72 53 71 6c 22 3e 54 68 65 20 53 51 4c  "strSql">The SQL
1840: 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74 20 74 6f   command text to
1850: 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e   prepare</param>
1860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1870: 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f 75 73 22   name="previous"
1880: 3e 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 74  >The previous st
1890: 61 74 65 6d 65 6e 74 20 69 6e 20 61 20 6d 75 6c  atement in a mul
18a0: 74 69 2d 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ti-statement com
18b0: 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c 20 69 66  mand, or null if
18c0: 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 73 74 61   no previous sta
18d0: 74 65 6d 65 6e 74 20 65 78 69 73 74 73 3c 2f 70  tement exists</p
18e0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
18f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 69 6d 65  param name="time
1900: 6f 75 74 4d 53 22 3e 54 68 65 20 74 69 6d 65 6f  outMS">The timeo
1910: 75 74 20 74 6f 20 77 61 69 74 20 62 65 66 6f 72  ut to wait befor
1920: 65 20 61 62 6f 72 74 69 6e 67 20 74 68 65 20 70  e aborting the p
1930: 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a  repare</param>..
1940: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1950: 61 6d 65 3d 22 73 74 72 52 65 6d 61 69 6e 22 3e  ame="strRemain">
1960: 54 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  The remainder of
1970: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1980: 68 61 74 20 77 61 73 20 6e 6f 74 20 70 72 6f 63  hat was not proc
1990: 65 73 73 65 64 2e 20 20 45 61 63 68 20 63 61 6c  essed.  Each cal
19a0: 6c 20 74 6f 20 70 72 65 70 61 72 65 20 70 61 72  l to prepare par
19b0: 73 65 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  ses the..    ///
19c0: 20 53 51 4c 20 75 70 20 74 6f 20 74 6f 20 65 69   SQL up to to ei
19d0: 74 68 65 72 20 74 68 65 20 65 6e 64 20 6f 66 20  ther the end of 
19e0: 74 68 65 20 74 65 78 74 20 6f 72 20 74 6f 20 74  the text or to t
19f0: 68 65 20 66 69 72 73 74 20 73 65 6d 69 2d 63 6f  he first semi-co
1a00: 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72 2e 20 20  lon delimiter.  
1a10: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 74 65  The remaining te
1a20: 78 74 20 69 73 20 72 65 74 75 72 6e 65 64 0d 0a  xt is returned..
1a30: 20 20 20 20 2f 2f 2f 20 68 65 72 65 20 66 6f 72      /// here for
1a40: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 63 61   a subsequent ca
1a50: 6c 6c 20 74 6f 20 50 72 65 70 61 72 65 28 29 20  ll to Prepare() 
1a60: 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65 20 74 65  until all the te
1a70: 78 74 20 68 61 73 20 62 65 65 6e 20 70 72 6f 63  xt has been proc
1a80: 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  essed.</param>..
1a90: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1aa0: 3e 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 69 74  >Returns an init
1ab0: 69 61 6c 69 7a 65 64 20 53 51 4c 69 74 65 53 74  ialized SQLiteSt
1ac0: 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74 75 72 6e  atement.</return
1ad0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1ae0: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
1af0: 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72  Statement Prepar
1b00: 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
1b10: 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73  on cnn, string s
1b20: 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61  trSql, SQLiteSta
1b30: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c  tement previous,
1b40: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c   uint timeoutMS,
1b50: 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52   out string strR
1b60: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 2f 2f 2f  emain);..    ///
1b70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1b80: 2f 2f 2f 20 53 74 65 70 73 20 74 68 72 6f 75 67  /// Steps throug
1b90: 68 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  h a prepared sta
1ba0: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
1bb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1bc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1bd0: 3d 22 73 74 6d 74 22 3e 54 68 65 20 53 51 4c 69  ="stmt">The SQLi
1be0: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6f 20 73  teStatement to s
1bf0: 74 65 70 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  tep through</par
1c00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1c10: 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20  turns>True if a 
1c20: 72 6f 77 20 77 61 73 20 72 65 74 75 72 6e 65 64  row was returned
1c30: 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f 74 2e 3c  , False if not.<
1c40: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1c50: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1c60: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
1c70: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
1c80: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
1c90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
1ca0: 73 65 74 73 20 61 20 70 72 65 70 61 72 65 64 20  sets a prepared 
1cb0: 73 74 61 74 65 6d 65 6e 74 20 73 6f 20 69 74 20  statement so it 
1cc0: 63 61 6e 20 62 65 20 65 78 65 63 75 74 65 64 20  can be executed 
1cd0: 61 67 61 69 6e 2e 20 20 49 66 20 74 68 65 20 65  again.  If the e
1ce0: 72 72 6f 72 20 72 65 74 75 72 6e 65 64 20 69 73  rror returned is
1cf0: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2c 20   SQLITE_SCHEMA, 
1d00: 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61 6e 73 70  ..    /// transp
1d10: 61 72 65 6e 74 6c 79 20 61 74 74 65 6d 70 74 20  arently attempt 
1d20: 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20 53  to rebuild the S
1d30: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
1d40: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20   throw an error 
1d50: 69 66 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20  if that was not 
1d60: 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20 2f  possible...    /
1d70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1d80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1d90: 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74  me="stmt">The st
1da0: 61 74 65 6d 65 6e 74 20 74 6f 20 72 65 73 65 74  atement to reset
1db0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1dc0: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
1dd0: 6e 73 20 2d 31 20 69 66 20 74 68 65 20 73 63 68  ns -1 if the sch
1de0: 65 6d 61 20 63 68 61 6e 67 65 64 20 77 68 69 6c  ema changed whil
1df0: 65 20 72 65 73 65 74 74 69 6e 67 2c 20 30 20 69  e resetting, 0 i
1e00: 66 20 74 68 65 20 72 65 73 65 74 20 77 61 73 20  f the reset was 
1e10: 73 75 63 65 73 73 66 75 6c 20 6f 72 20 36 20 28  sucessful or 6 (
1e20: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 20 69  SQLITE_LOCKED) i
1e30: 66 20 74 68 65 20 72 65 73 65 74 20 66 61 69 6c  f the reset fail
1e40: 65 64 20 64 75 65 20 74 6f 20 61 20 6c 6f 63 6b  ed due to a lock
1e50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1e60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1e70: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
1e80: 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74  e Reset(SQLiteSt
1e90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 3b 0d 0a  atement stmt);..
1ea0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1eb0: 74 72 61 63 74 20 76 6f 69 64 20 43 61 6e 63 65  tract void Cance
1ec0: 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  l();....    inte
1ed0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1ee0: 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53  id Bind_Double(S
1ef0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1f00: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
1f10: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
1f20: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75  , int index, dou
1f30: 62 6c 65 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ble value);..   
1f40: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1f50: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  ct void Bind_Int
1f60: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
1f70: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
1f80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
1f90: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
1fa0: 20 49 6e 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a   Int32 value);..
1fb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1fc0: 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f  tract void Bind_
1fd0: 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
1fe0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
1ff0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2000: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
2010: 64 65 78 2c 20 55 49 6e 74 33 32 20 76 61 6c 75  dex, UInt32 valu
2020: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2030: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2040: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
2050: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2060: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2070: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
2080: 74 20 69 6e 64 65 78 2c 20 49 6e 74 36 34 20 76  t index, Int64 v
2090: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65  alue);..    inte
20a0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
20b0: 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53  id Bind_UInt64(S
20c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
20d0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
20e0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
20f0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 55 49 6e  , int index, UIn
2100: 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t64 value);..   
2110: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2120: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 54 65 78  ct void Bind_Tex
2130: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
2140: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
2150: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
2160: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
2170: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a  string value);..
2180: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2190: 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f  tract void Bind_
21a0: 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65  Blob(SQLiteState
21b0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
21c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
21d0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
21e0: 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61  x, byte[] blobDa
21f0: 74 61 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ta);..    intern
2200: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2210: 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53   Bind_DateTime(S
2220: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
2230: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
2240: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
2250: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
2260: 65 54 69 6d 65 20 64 74 29 3b 0d 0a 20 20 20 20  eTime dt);..    
2270: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2280: 74 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c  t void Bind_Null
2290: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
22a0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
22b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
22c0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  gs, int index);.
22d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
22e0: 61 62 73 74 72 61 63 74 20 69 6e 74 20 42 69 6e  abstract int Bin
22f0: 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c  d_ParamCount(SQL
2300: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2310: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
2320: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 3b  ionFlags flags);
2330: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2340: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 42  bstract string B
2350: 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51  ind_ParamName(SQ
2360: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2370: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
2380: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
2390: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20   int index);..  
23a0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
23b0: 61 63 74 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  act int Bind_Par
23c0: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
23d0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
23e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
23f0: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
2400: 67 20 70 61 72 61 6d 4e 61 6d 65 29 3b 0d 0a 0d  g paramName);...
2410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2420: 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d  stract int Colum
2430: 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  nCount(SQLiteSta
2440: 74 65 6d 65 6e 74 20 73 74 6d 74 29 3b 0d 0a 20  tement stmt);.. 
2450: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2460: 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75  ract string Colu
2470: 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  mnName(SQLiteSta
2480: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2490: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
24a0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
24b0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
24c0: 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
24d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
24e0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
24f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2500: 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75  ract string Colu
2510: 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
2520: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2530: 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65   index, out Type
2540: 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
2550: 74 79 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ty);..    intern
2560: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
2570: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69  ColumnIndex(SQLi
2580: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2590: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e  , string columnN
25a0: 61 6d 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ame);..    inter
25b0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
25c0: 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  ing ColumnOrigin
25d0: 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  alName(SQLiteSta
25e0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
25f0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2600: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2610: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74  string ColumnDat
2620: 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65  abaseName(SQLite
2630: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2640: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
2650: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2660: 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  ct string Column
2670: 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65  TableName(SQLite
2680: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2690: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
26a0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
26b0: 63 74 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65  ct void ColumnMe
26c0: 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
26d0: 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
26e0: 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
26f0: 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  umn, out string 
2700: 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74  dataType, out st
2710: 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75  ring collateSequ
2720: 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e  ence, out bool n
2730: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c  otNull, out bool
2740: 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74   primaryKey, out
2750: 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d   bool autoIncrem
2760: 65 6e 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ent);..    inter
2770: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
2780: 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e  d GetIndexColumn
2790: 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72  ExtendedInfo(str
27a0: 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73 74  ing database, st
27b0: 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69  ring index, stri
27c0: 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69  ng column, out i
27d0: 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  nt sortMode, out
27e0: 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75   int onError, ou
27f0: 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69  t string collati
2800: 6f 6e 53 65 71 75 65 6e 63 65 29 3b 0d 0a 0d 0a  onSequence);....
2810: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2820: 74 72 61 63 74 20 64 6f 75 62 6c 65 20 47 65 74  tract double Get
2830: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
2840: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2850: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2860: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2870: 53 42 79 74 65 20 47 65 74 53 42 79 74 65 28 53  SByte GetSByte(S
2880: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
2890: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
28a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
28b0: 62 73 74 72 61 63 74 20 42 79 74 65 20 47 65 74  bstract Byte Get
28c0: 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
28d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
28e0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
28f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e  rnal abstract In
2900: 74 31 36 20 47 65 74 49 6e 74 31 36 28 53 51 4c  t16 GetInt16(SQL
2910: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2920: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
2930: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2940: 74 72 61 63 74 20 55 49 6e 74 31 36 20 47 65 74  tract UInt16 Get
2950: 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  UInt16(SQLiteSta
2960: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2970: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2980: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2990: 49 6e 74 33 32 20 47 65 74 49 6e 74 33 32 28 53  Int32 GetInt32(S
29a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
29b0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
29c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
29d0: 62 73 74 72 61 63 74 20 55 49 6e 74 33 32 20 47  bstract UInt32 G
29e0: 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  etUInt32(SQLiteS
29f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
2a00: 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  nt index);..    
2a10: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2a20: 74 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36 34  t Int64 GetInt64
2a30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2a40: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
2a50: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2a60: 20 61 62 73 74 72 61 63 74 20 55 49 6e 74 36 34   abstract UInt64
2a70: 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74   GetUInt64(SQLit
2a80: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2a90: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20   int index);..  
2aa0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2ab0: 61 63 74 20 73 74 72 69 6e 67 20 47 65 74 54 65  act string GetTe
2ac0: 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  xt(SQLiteStateme
2ad0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
2ae0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
2af0: 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67  al abstract long
2b00: 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65   GetBytes(SQLite
2b10: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2b20: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e  int index, int n
2b30: 44 61 74 61 6f 66 66 73 65 74 2c 20 62 79 74 65  Dataoffset, byte
2b40: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
2b50: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
2b60: 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  h);..    interna
2b70: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
2b80: 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53  GetChars(SQLiteS
2b90: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
2ba0: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
2bb0: 61 74 61 6f 66 66 73 65 74 2c 20 63 68 61 72 5b  ataoffset, char[
2bc0: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
2bd0: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
2be0: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2bf0: 20 61 62 73 74 72 61 63 74 20 44 61 74 65 54 69   abstract DateTi
2c00: 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
2c10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
2c20: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
2c30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2c40: 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 49 73 4e  bstract bool IsN
2c50: 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ull(SQLiteStatem
2c60: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2c70: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  dex);....    int
2c80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2c90: 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74  oid CreateCollat
2ca0: 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f  ion(string strCo
2cb0: 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43  llation, SQLiteC
2cc0: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53  ollation func, S
2cd0: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
2ce0: 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 69 6e 74  unc16);..    int
2cf0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2d00: 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63 74 69  oid CreateFuncti
2d10: 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e  on(string strFun
2d20: 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73  ction, int nArgs
2d30: 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53  , bool needCollS
2d40: 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  eq, SQLiteCallba
2d50: 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  ck func, SQLiteC
2d60: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70  allback funcstep
2d70: 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c  , SQLiteFinalCal
2d80: 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29  lback funcfinal)
2d90: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2da0: 61 62 73 74 72 61 63 74 20 43 6f 6c 6c 61 74 69  abstract Collati
2db0: 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
2dc0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
2dd0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
2de0: 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
2df0: 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ext);..    inter
2e00: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
2e10: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
2e20: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
2e30: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
2e40: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
2e50: 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
2e60: 69 6e 67 20 73 32 29 3b 0d 0a 20 20 20 20 69 6e  ing s2);..    in
2e70: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2e80: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
2e90: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
2ea0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
2eb0: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
2ec0: 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
2ed0: 63 68 61 72 5b 5d 20 63 32 29 3b 0d 0a 0d 0a 20  char[] c2);.... 
2ee0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2ef0: 72 61 63 74 20 69 6e 74 20 41 67 67 72 65 67 61  ract int Aggrega
2f00: 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63  teCount(IntPtr c
2f10: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e  ontext);..    in
2f20: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2f30: 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65  IntPtr Aggregate
2f40: 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63  Context(IntPtr c
2f50: 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  ontext);....    
2f60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2f70: 74 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  t long GetParamV
2f80: 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
2f90: 20 70 74 72 2c 20 69 6e 74 20 6e 44 61 74 61 4f   ptr, int nDataO
2fa0: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
2fb0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
2fc0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a   int nLength);..
2fd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2fe0: 74 72 61 63 74 20 64 6f 75 62 6c 65 20 47 65 74  tract double Get
2ff0: 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
3000: 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20  (IntPtr ptr);.. 
3010: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3020: 72 61 63 74 20 69 6e 74 20 47 65 74 50 61 72 61  ract int GetPara
3030: 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50  mValueInt32(IntP
3040: 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e  tr ptr);..    in
3050: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3060: 49 6e 74 36 34 20 47 65 74 50 61 72 61 6d 56 61  Int64 GetParamVa
3070: 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
3080: 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ptr);..    inter
3090: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
30a0: 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ing GetParamValu
30b0: 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74 72  eText(IntPtr ptr
30c0: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
30d0: 20 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66   abstract TypeAf
30e0: 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
30f0: 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
3100: 70 74 72 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  ptr);....    int
3110: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
3120: 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49  oid ReturnBlob(I
3130: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
3140: 79 74 65 5b 5d 20 76 61 6c 75 65 29 3b 0d 0a 20  yte[] value);.. 
3150: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3160: 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e  ract void Return
3170: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f  Double(IntPtr co
3180: 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61  ntext, double va
3190: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
31a0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
31b0: 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e  d ReturnError(In
31c0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
31d0: 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ring value);..  
31e0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
31f0: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 49  act void ReturnI
3200: 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
3210: 65 78 74 2c 20 49 6e 74 33 32 20 76 61 6c 75 65  ext, Int32 value
3220: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
3230: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52   abstract void R
3240: 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74  eturnInt64(IntPt
3250: 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 36 34  r context, Int64
3260: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
3270: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3280: 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
3290: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b  IntPtr context);
32a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
32b0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74  bstract void Ret
32c0: 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63  urnText(IntPtr c
32d0: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
32e0: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  alue);....    //
32f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3300: 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
3310: 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
3320: 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
3330: 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20  er to declare a 
3340: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
3350: 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
3360: 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
3370: 6f 20 74 68 65 20 78 43 72 65 61 74 65 20 6f 72  o the xCreate or
3380: 20 78 43 6f 6e 6e 65 63 74 20 76 69 72 74 75 61   xConnect virtua
3390: 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
33a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
33b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
33c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
33d0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
33e0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
33f0: 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
3400: 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
3410: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
3420: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62  table..    /// b
3430: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
3440: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3450: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3460: 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d   name="strSql">.
3470: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72  .    /// The str
3480: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
3490: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
34a0: 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20   describing the 
34b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f  virtual table to
34c0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63  ..    /// be dec
34d0: 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
34e0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
34f0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
3500: 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rror">..    /// 
3510: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
3520: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
3530: 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65  is parameter are
3540: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f   undefined.  Upo
3550: 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20  n failure,..    
3560: 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f  /// it should co
3570: 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72  ntain an appropr
3580: 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
3590: 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
35a0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
35b0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
35c0: 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
35d0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
35e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
35f0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
3600: 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  al abstract SQLi
3610: 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c  teErrorCode Decl
3620: 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  areVirtualTable(
3630: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 42 61 73 65  SQLiteModuleBase
3640: 20 6d 6f 64 75 6c 65 2c 20 73 74 72 69 6e 67 20   module, string 
3650: 73 74 72 53 71 6c 2c 20 72 65 66 20 73 74 72 69  strSql, ref stri
3660: 6e 67 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ng error);....  
3670: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3680: 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
3690: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
36a0: 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62  ension loading b
36b0: 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f  y SQLite...    /
36c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
36d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
36e0: 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20  me="bOnOff">..  
36f0: 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e    /// True to en
3700: 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20  able loading of 
3710: 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73  extensions, fals
3720: 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20  e to disable... 
3730: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3740: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3750: 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 4c  stract void SetL
3760: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f  oadExtension(boo
3770: 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20  l bOnOff);..    
3780: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3790: 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
37a0: 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
37b0: 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
37c0: 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
37d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
37e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
37f0: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
3800: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
3810: 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
3820: 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
3830: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
3840: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
3850: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3870: 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
3880: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
3890: 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
38a0: 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
38b0: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
38c0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
38d0: 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
38e0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
38f0: 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
3900: 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
3910: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
3920: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
3930: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3940: 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
3950: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
3960: 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
3970: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
3980: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45  mary>..    /// E
3990: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
39a0: 65 64 20 65 78 74 65 6e 65 64 20 72 65 73 75 6c  ed extened resul
39b0: 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
39c0: 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
39d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
39e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
39f0: 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 74 72 75  ame="bOnOff">tru
3a00: 65 20 74 6f 20 65 6e 61 62 6c 65 20 65 78 74 65  e to enable exte
3a10: 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65  nded result code
3a20: 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61  s, false to disa
3a30: 62 6c 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ble.</param>..  
3a40: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
3a50: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
3a60: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3a70: 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65   void SetExtende
3a80: 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f  dResultCodes(boo
3a90: 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20  l bOnOff);..    
3aa0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3ab0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
3ac0: 68 65 20 6e 75 6d 65 72 69 63 20 72 65 73 75 6c  he numeric resul
3ad0: 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 6d  t code for the m
3ae0: 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69 6c 65  ost recent faile
3af0: 64 20 53 51 4c 69 74 65 20 41 50 49 20 63 61 6c  d SQLite API cal
3b00: 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  l ..    /// asso
3b10: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
3b20: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3b30: 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ion. ..    /// <
3b40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
3b50: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 73 75  // <returns>Resu
3b60: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
3b70: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3b80: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
3b90: 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43  rrorCode ResultC
3ba0: 6f 64 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  ode();..    /// 
3bb0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3bc0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65  // Returns the e
3bd0: 78 74 65 6e 64 65 64 20 6e 75 6d 65 72 69 63 20  xtended numeric 
3be0: 72 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72 20  result code for 
3bf0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
3c00: 66 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41 50  failed SQLite AP
3c10: 49 20 63 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f  I call ..    ///
3c20: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3c30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
3c40: 6e 6e 65 63 74 69 6f 6e 2e 20 0d 0a 20 20 20 20  nnection. ..    
3c50: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3c60: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3c70: 3e 45 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74  >Extended result
3c80: 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d   code</returns>.
3c90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3ca0: 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
3cb0: 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52  orCode ExtendedR
3cc0: 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a  esultCode();....
3cd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3ce0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  >..    /// Add a
3cf0: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
3d00: 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
3d10: 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
3d20: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
3d30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3d40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 45 72  <param name="iEr
3d50: 72 43 6f 64 65 22 3e 45 72 72 6f 72 20 63 6f 64  rCode">Error cod
3d60: 65 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 20 77  e to be logged w
3d70: 69 74 68 20 74 68 65 20 6d 65 73 73 61 67 65 2e  ith the message.
3d80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3d90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a  / <param name="z
3da0: 4d 65 73 73 61 67 65 22 3e 53 74 72 69 6e 67 20  Message">String 
3db0: 74 6f 20 62 65 20 6c 6f 67 67 65 64 2e 20 20 55  to be logged.  U
3dc0: 6e 6c 69 6b 65 20 74 68 65 20 53 51 4c 69 74 65  nlike the SQLite
3dd0: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 0d   sqlite3_log() .
3de0: 0a 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61  .    /// interfa
3df0: 63 65 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  ce, this should 
3e00: 62 65 20 70 72 65 2d 66 6f 72 6d 61 74 74 65 64  be pre-formatted
3e10: 2e 20 20 43 6f 6e 73 69 64 65 72 20 75 73 69 6e  .  Consider usin
3e20: 67 20 74 68 65 20 0d 0a 20 20 20 20 2f 2f 2f 20  g the ..    /// 
3e30: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 29 20  String.Format() 
3e40: 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  function.</param
3e50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3e60: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
3e70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3e80: 74 72 61 63 74 20 76 6f 69 64 20 4c 6f 67 4d 65  tract void LogMe
3e90: 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f  ssage(SQLiteErro
3ea0: 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20  rCode iErrCode, 
3eb0: 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29  string zMessage)
3ec0: 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  ;....#if INTEROP
3ed0: 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65  _CODEC..    inte
3ee0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3ef0: 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
3f00: 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
3f10: 74 65 73 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  tes);..    inter
3f20: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3f30: 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
3f40: 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77  (byte[] newPassw
3f50: 6f 72 64 42 79 74 65 73 29 3b 0d 0a 23 65 6e 64  ordBytes);..#end
3f60: 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  if....    intern
3f70: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
3f80: 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53   SetUpdateHook(S
3f90: 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62  QLiteUpdateCallb
3fa0: 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20  ack func);..    
3fb0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3fc0: 74 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74  t void SetCommit
3fd0: 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69  Hook(SQLiteCommi
3fe0: 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b  tCallback func);
3ff0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
4000: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
4010: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51  TraceCallback(SQ
4020: 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
4030: 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e  k func);..    in
4040: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
4050: 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
4060: 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
4070: 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
4080: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
4090: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
40a0: 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
40b0: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
40c0: 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
40d0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
40e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
40f0: 43 68 65 63 6b 73 20 69 66 20 74 68 65 20 53 51  Checks if the SQ
4100: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
4110: 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69  y has been initi
4120: 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 63 75  alized in the cu
4130: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
4140: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4150: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
4160: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
4170: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 53  on-zero if the S
4180: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
4190: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
41a0: 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 63  ialized in the c
41b0: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2c 0d  urrent process,.
41c0: 0a 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 20 6f 74  .    /// zero ot
41d0: 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f  herwise...    //
41e0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
41f0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
4200: 61 63 74 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69  act bool IsIniti
4210: 61 6c 69 7a 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  alized();....   
4220: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4230: 63 74 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72  ct int GetCursor
4240: 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53  ForTable(SQLiteS
4250: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4260: 6e 74 20 64 61 74 61 62 61 73 65 2c 20 69 6e 74  nt database, int
4270: 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 20 20 20   rootPage);..   
4280: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4290: 63 74 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64  ct long GetRowId
42a0: 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65  ForCursor(SQLite
42b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
42c0: 69 6e 74 20 63 75 72 73 6f 72 29 3b 0d 0a 0d 0a  int cursor);....
42d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
42e0: 74 72 61 63 74 20 6f 62 6a 65 63 74 20 47 65 74  tract object Get
42f0: 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74  Value(SQLiteStat
4300: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
4310: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4320: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
4330: 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74  ex, SQLiteType t
4340: 79 70 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  yp);....    inte
4350: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f  rnal abstract bo
4360: 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20  ol AutoCommit.. 
4370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 3b     {..      get;
4380: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4390: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
43a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
43b0: 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
43c0: 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
43d0: 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
43e0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
43f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4400: 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53   Creates a new S
4410: 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a  QLite backup obj
4420: 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ect based on the
4430: 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e   provided destin
4440: 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
4450: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4460: 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  on.  The source 
4470: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4480: 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a  ion is the one..
4490: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
44a0: 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  ed with this obj
44b0: 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ect.  The source
44c0: 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e   and destination
44d0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
44e0: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  // connections c
44f0: 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  annot be the sam
4500: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
4510: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4520: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
4530: 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tCnn">The destin
4540: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
4550: 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
4560: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
4570: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d  am name="destNam
4580: 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  e">The destinati
4590: 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  on database name
45a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
45b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
45c0: 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20  sourceName">The 
45d0: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
45e0: 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
45f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4600: 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
4610: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
4620: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4630: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
4640: 74 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49  t SQLiteBackup I
4650: 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28  nitializeBackup(
4660: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
4670: 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43  Connection destC
4680: 6e 6e 2c 20 73 74 72 69 6e 67 20 64 65 73 74 4e  nn, string destN
4690: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
46a0: 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 29  ring sourceName)
46b0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
46c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
46d0: 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
46e0: 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
46f0: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
4700: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
4710: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
4720: 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
4730: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
4740: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
4750: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4760: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
4770: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
4780: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
4790: 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
47a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
47b0: 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
47c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
47d0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
47e0: 6f 20 63 6f 70 79 20 6f 72 20 6e 65 67 61 74 69  o copy or negati
47f0: 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72  ve to copy all r
4800: 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d  emaining pages..
4810: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
4820: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4830: 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d  m name="retry">.
4840: 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20  .    /// Set to 
4850: 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72  true if the oper
4860: 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ation needs to b
4870: 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f  e retried due to
4880: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
4890: 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65  // locking issue
48a0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
48b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
48c0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
48d0: 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61   True if there a
48e0: 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f  re more pages to
48f0: 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73   be copied, fals
4900: 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20  e otherwise...  
4910: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4920: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
4930: 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 53 74 65  bstract bool Ste
4940: 70 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61  pBackup(SQLiteBa
4950: 63 6b 75 70 20 62 61 63 6b 75 70 2c 20 69 6e 74  ckup backup, int
4960: 20 6e 50 61 67 65 2c 20 6f 75 74 20 62 6f 6f 6c   nPage, out bool
4970: 20 72 65 74 72 79 29 3b 0d 0a 0d 0a 20 20 20 20   retry);....    
4980: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4990: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
49a0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
49b0: 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
49c0: 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
49d0: 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
49e0: 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
49f0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
4a00: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
4a10: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
4a20: 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
4a30: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
4a40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4a50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4a60: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
4a70: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
4a80: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
4a90: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4aa0: 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
4ab0: 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
4ac0: 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
4ad0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
4ae0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4af0: 63 74 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  ct int Remaining
4b00: 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63  Backup(SQLiteBac
4b10: 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a  kup backup);....
4b20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4b30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
4b40: 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
4b50: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
4b60: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
4b70: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
4b80: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
4b90: 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
4ba0: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
4bb0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4bc0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4bd0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
4be0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
4bf0: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
4c00: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4c10: 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
4c20: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
4c30: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
4c40: 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
4c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
4c60: 72 61 63 74 20 69 6e 74 20 50 61 67 65 43 6f 75  ract int PageCou
4c70: 6e 74 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42  ntBackup(SQLiteB
4c80: 61 63 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a  ackup backup);..
4c90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4ca0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73  ry>..    /// Des
4cb0: 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70  troys the backup
4cc0: 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67   object, rolling
4cd0: 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70   back any backup
4ce0: 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d   that may be in.
4cf0: 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73  .    /// progess
4d00: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4d10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4d20: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
4d30: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
4d40: 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79  bject to destroy
4d50: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
4d60: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
4d70: 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b   void FinishBack
4d80: 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75 70 20  up(SQLiteBackup 
4d90: 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20 20  backup);....    
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4e00: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
4e10: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
4e20: 72 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76  rs..    public v
4e30: 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
4e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
4e50: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
4e60: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
4e70: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
4e80: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
4e90: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
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 2f 2f 2f 2f 2f  ////////////////
4ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4f00: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44  ..    #region ID
4f10: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
4f20: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
4f30: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
4f40: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69  sposed;..    pri
4f50: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
4f60: 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
4f70: 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69  ow */..    {..#i
4f80: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
4f90: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20  SED..        if 
4fa0: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
4fb0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4fc0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
4fd0: 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66  Exception(typeof
4fe0: 28 53 51 4c 69 74 65 42 61 73 65 29 2e 4e 61 6d  (SQLiteBase).Nam
4ff0: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
5000: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
5060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5070: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
5080: 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  al void Dispose(
5090: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
50a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
50b0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
50c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
50d0: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
50e0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
50f0: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
5100: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5140: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
5150: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
5160: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
5170: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
51b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
51c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
51d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
51f0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
5200: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
5210: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
5220: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5250: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
5260: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
5270: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5280: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
5290: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5300: 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
5310: 6f 72 0d 0a 20 20 20 20 7e 53 51 4c 69 74 65 42  or..    ~SQLiteB
5320: 61 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ase()..    {..  
5330: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
5340: 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  lse);..    }..  
5350: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
5360: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 54 68  ///....    // Th
53d0: 65 73 65 20 73 74 61 74 69 63 73 20 61 72 65 20  ese statics are 
53e0: 68 65 72 65 20 66 6f 72 20 6c 61 63 6b 20 6f 66  here for lack of
53f0: 20 61 20 62 65 74 74 65 72 20 70 6c 61 63 65 20   a better place 
5400: 74 6f 20 70 75 74 20 74 68 65 6d 2e 0d 0a 20 20  to put them...  
5410: 20 20 2f 2f 20 54 68 65 79 20 65 78 69 73 74 20    // They exist 
5420: 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65  here because the
5430: 79 20 61 72 65 20 63 61 6c 6c 65 64 20 64 75 72  y are called dur
5440: 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 69 7a 61  ing the finaliza
5450: 74 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 2f 2f 20  tion of..    // 
5460: 61 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  a SQLiteStatemen
5470: 74 48 61 6e 64 6c 65 2c 20 53 51 4c 69 74 65 43  tHandle, SQLiteC
5480: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 2c  onnectionHandle,
5490: 20 61 6e 64 20 53 51 4c 69 74 65 46 75 6e 63 74   and SQLiteFunct
54a0: 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 2e  ionCookieHandle.
54b0: 0d 0a 20 20 20 20 2f 2f 20 54 68 65 72 65 66 6f  ..    // Therefo
54c0: 72 65 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f  re these functio
54d0: 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 73 74  ns have to be st
54e0: 61 74 69 63 2c 20 61 6e 64 20 68 61 76 65 20 74  atic, and have t
54f0: 6f 20 62 65 20 6c 6f 77 2d 6c 65 76 65 6c 2e 0d  o be low-level..
5500: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
5510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72  //////....    pr
5570: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
5580: 69 6e 67 5b 5d 20 5f 65 72 72 6f 72 4d 65 73 73  ing[] _errorMess
5590: 61 67 65 73 20 3d 20 7b 0a 20 20 20 20 20 20 20  ages = {.       
55a0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 20 20   /* SQLITE_OK   
55b0: 20 20 20 20 20 20 20 2a 2f 20 22 6e 6f 74 20 61         */ "not a
55c0: 6e 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20  n error",..     
55d0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 45 52 52     /* SQLITE_ERR
55e0: 4f 52 20 20 20 20 20 20 20 2a 2f 20 22 53 51 4c  OR       */ "SQL
55f0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
5600: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
5610: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
5620: 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 20 20  QLITE_INTERNAL  
5630: 20 20 2a 2f 20 22 69 6e 74 65 72 6e 61 6c 20 6c    */ "internal l
5640: 6f 67 69 63 20 65 72 72 6f 72 22 2c 0d 0a 20 20  ogic error",..  
5650: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
5660: 50 45 52 4d 20 20 20 20 20 20 20 20 2a 2f 20 22  PERM        */ "
5670: 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f  access permissio
5680: 6e 20 64 65 6e 69 65 64 22 2c 0d 0a 20 20 20 20  n denied",..    
5690: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 41 42      /* SQLITE_AB
56a0: 4f 52 54 20 20 20 20 20 20 20 2a 2f 20 22 63 61  ORT       */ "ca
56b0: 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64  llback requested
56c0: 20 71 75 65 72 79 20 61 62 6f 72 74 22 2c 0d 0a   query abort",..
56d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
56e0: 45 5f 42 55 53 59 20 20 20 20 20 20 20 20 2a 2f  E_BUSY        */
56f0: 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   "database is lo
5700: 63 6b 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  cked",..        
5710: 2f 2a 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  /* SQLITE_LOCKED
5720: 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61        */ "databa
5730: 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
5740: 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  ed",..        /*
5750: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20   SQLITE_NOMEM   
5760: 20 20 20 20 2a 2f 20 22 6f 75 74 20 6f 66 20 6d      */ "out of m
5770: 65 6d 6f 72 79 22 2c 0d 0a 20 20 20 20 20 20 20  emory",..       
5780: 20 2f 2a 20 53 51 4c 49 54 45 5f 52 45 41 44 4f   /* SQLITE_READO
5790: 4e 4c 59 20 20 20 20 2a 2f 20 22 61 74 74 65 6d  NLY    */ "attem
57a0: 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
57b0: 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 22  adonly database"
57c0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
57d0: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20 20  LITE_INTERRUPT  
57e0: 20 2a 2f 20 22 69 6e 74 65 72 72 75 70 74 65 64   */ "interrupted
57f0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
5800: 51 4c 49 54 45 5f 49 4f 45 52 52 20 20 20 20 20  QLITE_IOERR     
5810: 20 20 2a 2f 20 22 64 69 73 6b 20 49 2f 4f 20 65    */ "disk I/O e
5820: 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20 20  rror",..        
5830: 2f 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  /* SQLITE_CORRUP
5840: 54 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61  T     */ "databa
5850: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
5860: 20 6d 61 6c 66 6f 72 6d 65 64 22 2c 0d 0a 20 20   malformed",..  
5870: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
5880: 4e 4f 54 46 4f 55 4e 44 20 20 20 20 2a 2f 20 22  NOTFOUND    */ "
5890: 75 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f  unknown operatio
58a0: 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  n",..        /* 
58b0: 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20 20  SQLITE_FULL     
58c0: 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20     */ "database 
58d0: 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 22  or disk is full"
58e0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
58f0: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20  LITE_CANTOPEN   
5900: 20 2a 2f 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f   */ "unable to o
5910: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
5920: 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  e",..        /* 
5930: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 20  SQLITE_PROTOCOL 
5940: 20 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 20 70     */ "locking p
5950: 72 6f 74 6f 63 6f 6c 22 2c 0d 0a 20 20 20 20 20  rotocol",..     
5960: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4d 50     /* SQLITE_EMP
5970: 54 59 20 20 20 20 20 20 20 2a 2f 20 22 74 61 62  TY       */ "tab
5980: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  le contains no d
5990: 61 74 61 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ata",..        /
59a0: 2a 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  * SQLITE_SCHEMA 
59b0: 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73       */ "databas
59c0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
59d0: 6e 67 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  nged",..        
59e0: 2f 2a 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  /* SQLITE_TOOBIG
59f0: 20 20 20 20 20 20 2a 2f 20 22 73 74 72 69 6e 67        */ "string
5a00: 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
5a10: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
5a20: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
5a30: 20 20 2a 2f 20 22 63 6f 6e 73 74 72 61 69 6e 74    */ "constraint
5a40: 20 66 61 69 6c 65 64 22 2c 0d 0a 20 20 20 20 20   failed",..     
5a50: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49 53     /* SQLITE_MIS
5a60: 4d 41 54 43 48 20 20 20 20 2a 2f 20 22 64 61 74  MATCH    */ "dat
5a70: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 2c  atype mismatch",
5a80: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
5a90: 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20 20  ITE_MISUSE      
5aa0: 2a 2f 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74  */ "library rout
5ab0: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
5ac0: 66 20 73 65 71 75 65 6e 63 65 22 2c 0d 0a 20 20  f sequence",..  
5ad0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
5ae0: 4e 4f 4c 46 53 20 20 20 20 20 20 20 2a 2f 20 22  NOLFS       */ "
5af0: 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f  large file suppo
5b00: 72 74 20 69 73 20 64 69 73 61 62 6c 65 64 22 2c  rt is disabled",
5b10: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
5b20: 49 54 45 5f 41 55 54 48 20 20 20 20 20 20 20 20  ITE_AUTH        
5b30: 2a 2f 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f  */ "authorizatio
5b40: 6e 20 64 65 6e 69 65 64 22 2c 0d 0a 20 20 20 20  n denied",..    
5b50: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 46 4f      /* SQLITE_FO
5b60: 52 4d 41 54 20 20 20 20 20 20 2a 2f 20 22 61 75  RMAT      */ "au
5b70: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
5b80: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 2c 0d   format error",.
5b90: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
5ba0: 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 20 2a  TE_RANGE       *
5bb0: 2f 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d  / "bind or colum
5bc0: 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72  n index out of r
5bd0: 61 6e 67 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  ange",..        
5be0: 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  /* SQLITE_NOTADB
5bf0: 20 20 20 20 20 20 2a 2f 20 22 66 69 6c 65 20 69        */ "file i
5c00: 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69  s encrypted or i
5c10: 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
5c20: 22 0a 20 20 20 20 7d 3b 0a 0d 0a 20 20 20 20 2f  ".    };...    /
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5c90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5ca0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5cb0: 75 72 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d  urns the error m
5cc0: 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 73  essage for the s
5cd0: 70 65 63 69 66 69 65 64 20 53 51 4c 69 74 65 20  pecified SQLite 
5ce0: 72 65 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e  return code usin
5cf0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 69  g..    /// the i
5d00: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6c  nternal static l
5d10: 6f 6f 6b 75 70 20 74 61 62 6c 65 2e 0d 0a 20 20  ookup table...  
5d20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5d30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5d40: 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65 20 53   name="rc">The S
5d50: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
5d60: 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
5d70: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
5d80: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f   error message o
5d90: 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e  r null if it can
5da0: 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72  not be found.</r
5db0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
5dc0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
5dd0: 6e 67 20 46 61 6c 6c 62 61 63 6b 47 65 74 45 72  ng FallbackGetEr
5de0: 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74 65  rorString(SQLite
5df0: 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a 20  ErrorCode rc).. 
5e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
5e10: 20 28 5f 65 72 72 6f 72 4d 65 73 73 61 67 65 73   (_errorMessages
5e20: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
5e30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
5e40: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ll;....        i
5e50: 6e 74 20 69 6e 64 65 78 20 3d 20 28 69 6e 74 29  nt index = (int)
5e60: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  rc;....        i
5e70: 66 20 28 28 69 6e 64 65 78 20 3c 20 30 29 20 7c  f ((index < 0) |
5e80: 7c 20 28 69 6e 64 65 78 20 3e 3d 20 5f 65 72 72  | (index >= _err
5e90: 6f 72 4d 65 73 73 61 67 65 73 2e 4c 65 6e 67 74  orMessages.Lengt
5ea0: 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h))..           
5eb0: 20 69 6e 64 65 78 20 3d 20 28 69 6e 74 29 53 51   index = (int)SQ
5ec0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
5ed0: 72 6f 72 3b 20 2f 2a 20 4d 61 6b 65 20 69 6e 74  ror; /* Make int
5ee0: 6f 20 67 65 6e 65 72 69 63 20 65 72 72 6f 72 2e  o generic error.
5ef0: 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72   */....        r
5f00: 65 74 75 72 6e 20 5f 65 72 72 6f 72 4d 65 73 73  eturn _errorMess
5f10: 61 67 65 73 5b 69 6e 64 65 78 5d 3b 0a 20 20 20  ages[index];.   
5f20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5f40: 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 72 72   Returns the err
5f50: 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74  or message for t
5f60: 68 65 20 73 70 65 63 69 66 69 65 64 20 53 51 4c  he specified SQL
5f70: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
5f80: 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  using..    /// t
5f90: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
5fa0: 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61  r() function, fa
5fb0: 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20 74 68  lling back to th
5fc0: 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75  e internal looku
5fd0: 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65  p..    /// table
5fe0: 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a   if necessary...
5ff0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6000: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
6010: 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65  am name="rc">The
6020: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
6030: 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ode.</param>..  
6040: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
6050: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
6060: 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63   or null if it c
6070: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c  annot be found.<
6080: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
6090: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
60a0: 74 72 69 6e 67 20 47 65 74 45 72 72 6f 72 53 74  tring GetErrorSt
60b0: 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f 72  ring(SQLiteError
60c0: 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b 0d  Code rc)..    {.
60d0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
60e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
60f0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
6100: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6110: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
6120: 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20  rstr(rc);....   
6130: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72           if (ptr
6140: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
6150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6160: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
6170: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6190: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
61a0: 50 74 72 54 6f 53 74 72 69 6e 67 41 6e 73 69 28  PtrToStringAnsi(
61b0: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
61d0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
61e0: 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e  g(ptr, -1);..#en
61f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
6200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
6210: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e         catch (En
6220: 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64  tryPointNotFound
6230: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
6240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6250: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
6260: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ...        }....
6270: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46          return F
6280: 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53  allbackGetErrorS
6290: 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20  tring(rc);..    
62a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
62b0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
62c0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 53 51 4c  GetLastError(SQL
62d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
62e0: 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20  dle hdl, IntPtr 
62f0: 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  db)..    {..    
6300: 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20      if ((hdl == 
6310: 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20  null) || (db == 
6320: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
6330: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6340: 6e 20 22 6e 75 6c 6c 20 63 6f 6e 6e 65 63 74 69  n "null connecti
6350: 6f 6e 20 6f 72 20 64 61 74 61 62 61 73 65 20 68  on or database h
6360: 61 6e 64 6c 65 22 3b 0d 0a 0d 0a 20 20 20 20 20  andle";....     
6370: 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
6380: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
6390: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
63a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
63b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
63c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
63d0: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
63e0: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
63f0: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
6400: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
6410: 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  f PLATFORM_COMPA
6420: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6430: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
6440: 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65  dl.syncRoot)..#e
6450: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6460: 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e   lock (hdl)..#en
6470: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
6480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6490: 20 20 20 20 69 66 20 28 21 68 64 6c 2e 49 73 49      if (!hdl.IsI
64a0: 6e 76 61 6c 69 64 20 26 26 20 21 68 64 6c 2e 49  nvalid && !hdl.I
64b0: 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  sClosed)..      
64c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
64d0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
64e0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
64f0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
6500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6510: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 55 54       result = UT
6520: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
6530: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6540: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e  qlite3_errmsg_in
6550: 74 65 72 6f 70 28 64 62 2c 20 6f 75 74 20 6c 65  terop(db, out le
6560: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
6570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6580: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 55        result = U
6590: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
65a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
65b0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
65c0: 62 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  b), -1);..#endif
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
65f0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
6600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6620: 20 20 72 65 73 75 6c 74 20 3d 20 22 63 6c 6f 73    result = "clos
6630: 65 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 63 6f  ed or invalid co
6640: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 22  nnection handle"
6650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6660: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6670: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
6680: 20 20 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41          GC.KeepA
6690: 6c 69 76 65 28 68 64 6c 29 3b 0d 0a 20 20 20 20  live(hdl);..    
66a0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
66b0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
66c0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
66d0: 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b   void FinishBack
66e0: 75 70 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  up(SQLiteConnect
66f0: 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49  ionHandle hdl, I
6700: 6e 74 50 74 72 20 62 61 63 6b 75 70 29 0d 0a 20  ntPtr backup).. 
6710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
6720: 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20   ((hdl == null) 
6730: 7c 7c 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  || (backup == In
6740: 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75  tPtr.Zero)) retu
6750: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  rn;....        t
6760: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
6770: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
6780: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
6790: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
67a0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
67b0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
67c0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
67d0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41        {..#if PLA
67e0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
67f0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6800: 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79      lock (hdl.sy
6810: 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a  ncRoot)..#else..
6820: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
6830: 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a   (hdl)..#endif..
6840: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
6850: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
6860: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
6870: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6880: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6890: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
68a0: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
68b0: 73 68 5f 69 6e 74 65 72 6f 70 28 62 61 63 6b 75  sh_interop(backu
68c0: 70 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  p);..#else..    
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
68e0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
68f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6900: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
6910: 75 70 5f 66 69 6e 69 73 68 28 62 61 63 6b 75 70  up_finish(backup
6920: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6930: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6940: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
6950: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
6960: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
6970: 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  on(n, null);..  
6980: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
69a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
69b0: 61 74 69 63 20 76 6f 69 64 20 46 69 6e 61 6c 69  atic void Finali
69c0: 7a 65 53 74 61 74 65 6d 65 6e 74 28 53 51 4c 69  zeStatement(SQLi
69d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
69e0: 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 73  le hdl, IntPtr s
69f0: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
6a00: 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d       if ((hdl ==
6a10: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 6d 74 20   null) || (stmt 
6a20: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  == IntPtr.Zero))
6a30: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
6a40: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
6a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a60: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
6a70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6a80: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
6a90: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
6aa0: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
6ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
6ac0: 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  f PLATFORM_COMPA
6ad0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6ae0: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
6af0: 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65  dl.syncRoot)..#e
6b00: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6b10: 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e   lock (hdl)..#en
6b20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
6b30: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
6b40: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
6b50: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6b60: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6b70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6b80: 73 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  s.sqlite3_finali
6b90: 7a 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29  ze_interop(stmt)
6ba0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6bb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6bc0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6bd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6be0: 73 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  s.sqlite3_finali
6bf0: 7a 65 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  ze(stmt);..#endi
6c00: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
6c10: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6c20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6c30: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6c40: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
6c50: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
6c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
6c70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6c80: 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
6c90: 20 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e   CloseConnection
6ca0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
6cb0: 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74  nHandle hdl, Int
6cc0: 50 74 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a  Ptr db)..    {..
6cd0: 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64 6c          if ((hdl
6ce0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62   == null) || (db
6cf0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
6d00: 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20  ) return;....   
6d10: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6d20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6d30: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
6d40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6d50: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
6d60: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
6d70: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
6d80: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
6d90: 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
6da0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6db0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
6dc0: 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23  hdl.syncRoot)..#
6dd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6de0: 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65    lock (hdl)..#e
6df0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6e00: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
6e10: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
6e20: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6e30: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6e40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6e50: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ds.sqlite3_close
6e60: 5f 69 6e 74 65 72 6f 70 28 64 62 29 3b 0d 0a 23  _interop(db);..#
6e70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6e80: 20 20 20 20 20 20 52 65 73 65 74 43 6f 6e 6e 65        ResetConne
6e90: 63 74 69 6f 6e 28 68 64 6c 2c 20 64 62 2c 20 66  ction(hdl, db, f
6ea0: 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alse);....      
6eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6ec0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6ed0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6ee0: 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  s.sqlite3_close(
6ef0: 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  db);..#endif..  
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6f10: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
6f20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
6f30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6f40: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6f50: 72 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b 0d  rror(hdl, db));.
6f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6f70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
6f80: 0d 0a 0d 0a 23 69 66 20 21 49 4e 54 45 52 4f 50  ....#if !INTEROP
6f90: 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 0d 0a 20  _LEGACY_CLOSE.. 
6fa0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
6fb0: 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 43 6f 6e  ic void CloseCon
6fc0: 6e 65 63 74 69 6f 6e 56 32 28 53 51 4c 69 74 65  nectionV2(SQLite
6fd0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
6fe0: 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29   hdl, IntPtr db)
6ff0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7000: 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c   if ((hdl == nul
7010: 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74  l) || (db == Int
7020: 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72  Ptr.Zero)) retur
7030: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  n;....        tr
7040: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
7050: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7060: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7070: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
7080: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
7090: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
70a0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
70b0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54       {..#if PLAT
70c0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
70d0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
70e0: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e     lock (hdl.syn
70f0: 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20  cRoot)..#else.. 
7100: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
7110: 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  (hdl)..#endif.. 
7120: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
7130: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7140: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
7150: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7160: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
7170: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7180: 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f  te3_close_intero
7190: 70 28 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  p(db);..#else.. 
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
71b0: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 68  esetConnection(h
71c0: 64 6c 2c 20 64 62 2c 20 66 61 6c 73 65 29 3b 0d  dl, db, false);.
71d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
71e0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
71f0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
7200: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7210: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 3b  e3_close_v2(db);
7220: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7230: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
7240: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7250: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7260: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7270: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7280: 28 68 64 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20  (hdl, db));..   
7290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
72a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
72b0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
72c0: 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c  rnal static bool
72d0: 20 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e   ResetConnection
72e0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
72f0: 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74  nHandle hdl, Int
7300: 50 74 72 20 64 62 2c 20 62 6f 6f 6c 20 63 61 6e  Ptr db, bool can
7310: 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20  Throw)..    {.. 
7320: 20 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20         if ((hdl 
7330: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20  == null) || (db 
7340: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  == IntPtr.Zero))
7350: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
7360: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72  ..        bool r
7370: 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  esult = false;..
7380: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
7390: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
73a0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
73b0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
73c0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
73d0: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
73e0: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
73f0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
7400: 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d   {..#if PLATFORM
7410: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
7420: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  K..            l
7430: 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f  ock (hdl.syncRoo
7440: 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  t)..#else..     
7450: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c         lock (hdl
7460: 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  )..#endif..     
7470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7480: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
7490: 6e 54 68 72 6f 77 20 26 26 20 68 64 6c 2e 49 73  nThrow && hdl.Is
74a0: 49 6e 76 61 6c 69 64 29 0d 0a 20 20 20 20 20 20  Invalid)..      
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
74c0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
74d0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
74e0: 6e 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  n("The connectio
74f0: 6e 20 68 61 6e 64 6c 65 20 69 73 20 69 6e 76 61  n handle is inva
7500: 6c 69 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  lid.");....     
7510: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7520: 61 6e 54 68 72 6f 77 20 26 26 20 68 64 6c 2e 49  anThrow && hdl.I
7530: 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  sClosed)..      
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7550: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
7560: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
7570: 6e 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  n("The connectio
7580: 6e 20 68 61 6e 64 6c 65 20 69 73 20 63 6c 6f 73  n handle is clos
7590: 65 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ed.");....      
75a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 68            if (!h
75b0: 64 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20  dl.IsInvalid && 
75c0: 21 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29 0d 0a  !hdl.IsClosed)..
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
75f0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74         IntPtr st
7600: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
7610: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7620: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7630: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20  orCode n;....   
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   do..           
7660: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 20 20 20 20 73 74 6d 74 20 3d 20 55 6e 73 61 66      stmt = Unsaf
7690: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
76a0: 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74  qlite3_next_stmt
76b0: 28 64 62 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20  (db, stmt);..   
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 21 3d       if (stmt !=
76e0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
7710: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7730: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
7740: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7750: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
7760: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b  t_interop(stmt);
7770: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
77a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
77b0: 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 29  ite3_reset(stmt)
77c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
77f0: 20 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c            } whil
7800: 65 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74  e (stmt != IntPt
7810: 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
7840: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
7850: 20 49 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   Is a transactio
7860: 6e 20 4e 4f 54 20 70 65 6e 64 69 6e 67 20 6f 6e  n NOT pending on
7870: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 3f   the connection?
7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7890: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
78b0: 20 28 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 68   (IsAutocommit(h
78c0: 64 6c 2c 20 64 62 29 29 0d 0a 20 20 20 20 20 20  dl, db))..      
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
78e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78f0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
7900: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7960: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7970: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7980: 2e 73 71 6c 69 74 65 33 5f 65 78 65 63 28 0d 0a  .sqlite3_exec(..
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2c 20              db, 
79b0: 54 6f 55 54 46 38 28 22 52 4f 4c 4c 42 41 43 4b  ToUTF8("ROLLBACK
79c0: 22 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  "), IntPtr.Zero,
79d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20   IntPtr.Zero,.. 
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 73             out s
7a00: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
7a30: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 74        result = t
7a80: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ab0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
7ac0: 20 28 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20   (canThrow)..   
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
7b10: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7b20: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68 64   GetLastError(hd
7b30: 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20 20  l, db));..      
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7b60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7b80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7b90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7ba0: 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 68 64   GC.KeepAlive(hd
7bb0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
7bc0: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
7bd0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7be0: 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  al static bool I
7bf0: 73 41 75 74 6f 63 6f 6d 6d 69 74 28 53 51 4c 69  sAutocommit(SQLi
7c00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
7c10: 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64  le hdl, IntPtr d
7c20: 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  b)..    {..     
7c30: 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e     if ((hdl == n
7c40: 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49  ull) || (db == I
7c50: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74  ntPtr.Zero)) ret
7c60: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
7c70: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c        bool resul
7c80: 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  t = false;....  
7c90: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
7ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7cb0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
7cc0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7cd0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
7ce0: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
7cf0: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
7d00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
7d10: 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
7d20: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7d30: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
7d40: 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a  (hdl.syncRoot)..
7d50: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
7d60: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23     lock (hdl)..#
7d70: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
7d80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d90: 20 20 20 20 20 20 69 66 20 28 21 68 64 6c 2e 49        if (!hdl.I
7da0: 73 49 6e 76 61 6c 69 64 20 26 26 20 21 68 64 6c  sInvalid && !hdl
7db0: 2e 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20  .IsClosed)..    
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 72 65 73 75 6c 74 20 3d 20 28 55 6e 73 61 66 65  result = (Unsafe
7de0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7df0: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
7e00: 6d 6d 69 74 28 64 62 29 20 3d 3d 20 31 29 3b 0d  mmit(db) == 1);.
7e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7e20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7e30: 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28     GC.KeepAlive(
7e40: 68 64 6c 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55  hdl); /* NOTE: U
7e50: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 2e  nreachable code.
7e60: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 74   */..        ret
7e70: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
7e80: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 6e 74   }..  }....  int
7e90: 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 20  ernal interface 
7ea0: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
7eb0: 65 6e 73 69 6f 6e 73 0d 0a 20 20 7b 0d 0a 20 20  ensions..  {..  
7ec0: 20 20 76 6f 69 64 20 42 75 69 6c 64 54 65 6d 70    void BuildTemp
7ed0: 53 63 68 65 6d 61 28 53 51 4c 69 74 65 43 6f 6e  Schema(SQLiteCon
7ee0: 6e 65 63 74 69 6f 6e 20 63 6e 6e 29 3b 0d 0a 20  nection cnn);.. 
7ef0: 20 7d 0d 0a 0d 0a 20 20 5b 46 6c 61 67 73 5d 0d   }....  [Flags].
7f00: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75 6d  .  internal enum
7f10: 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73   SQLiteOpenFlags
7f20: 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 4e  Enum..  {..    N
7f30: 6f 6e 65 20 3d 20 30 2c 0d 0a 20 20 20 20 52 65  one = 0,..    Re
7f40: 61 64 4f 6e 6c 79 20 3d 20 30 78 30 31 2c 0d 0a  adOnly = 0x01,..
7f50: 20 20 20 20 52 65 61 64 57 72 69 74 65 20 3d 20      ReadWrite = 
7f60: 30 78 30 32 2c 0d 0a 20 20 20 20 43 72 65 61 74  0x02,..    Creat
7f70: 65 20 3d 20 30 78 30 34 2c 0d 0a 20 20 20 20 55  e = 0x04,..    U
7f80: 72 69 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ri = 0x40,..    
7f90: 53 68 61 72 65 64 43 61 63 68 65 20 3d 20 30 78  SharedCache = 0x
7fa0: 30 31 30 30 30 30 30 30 2c 0d 0a 20 20 20 20 44  01000000,..    D
7fb0: 65 66 61 75 6c 74 20 3d 20 30 78 30 36 2c 0d 0a  efault = 0x06,..
7fc0: 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75    }....  /// <su
7fd0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
7fe0: 65 20 65 78 74 72 61 20 62 65 68 61 76 69 6f 72  e extra behavior
7ff0: 61 6c 20 66 6c 61 67 73 20 74 68 61 74 20 63 61  al flags that ca
8000: 6e 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f 20  n be applied to 
8010: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  a connection... 
8020: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8030: 0a 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20  .  [Flags()]..  
8040: 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69  public enum SQLi
8050: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8060: 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f  s..  {..      //
8070: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8080: 20 20 20 2f 2f 2f 20 4e 6f 20 65 78 74 72 61 20     /// No extra 
8090: 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  flags...      //
80a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
80b0: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
80c0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
80d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
80e0: 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67  / Enable logging
80f0: 20 6f 66 20 61 6c 6c 20 53 51 4c 20 73 74 61 74   of all SQL stat
8100: 65 6d 65 6e 74 73 20 74 6f 20 62 65 20 70 72 65  ements to be pre
8110: 70 61 72 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  pared...      //
8120: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8130: 20 20 20 20 4c 6f 67 50 72 65 70 61 72 65 20 3d      LogPrepare =
8140: 20 30 78 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   0x1,....      /
8150: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8160: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c      /// Enable l
8170: 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20 62 6f  ogging of all bo
8180: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 79  und parameter ty
8190: 70 65 73 20 61 6e 64 20 72 61 77 20 76 61 6c 75  pes and raw valu
81a0: 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  es...      /// <
81b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
81c0: 20 4c 6f 67 50 72 65 42 69 6e 64 20 3d 20 30 78   LogPreBind = 0x
81d0: 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  2,....      /// 
81e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
81f0: 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67   /// Enable logg
8200: 69 6e 67 20 6f 66 20 61 6c 6c 20 62 6f 75 6e 64  ing of all bound
8210: 20 70 61 72 61 6d 65 74 65 72 20 73 74 72 6f 6e   parameter stron
8220: 67 6c 79 20 74 79 70 65 64 20 76 61 6c 75 65 73  gly typed values
8230: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
8240: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c  ummary>..      L
8250: 6f 67 42 69 6e 64 20 3d 20 30 78 34 2c 0d 0a 0d  ogBind = 0x4,...
8260: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
8270: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
8280: 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f  Enable logging o
8290: 66 20 61 6c 6c 20 65 78 63 65 70 74 69 6f 6e 73  f all exceptions
82a0: 20 63 61 75 67 68 74 20 66 72 6f 6d 20 75 73 65   caught from use
82b0: 72 2d 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20  r-provided..    
82c0: 20 20 2f 2f 2f 20 6d 61 6e 61 67 65 64 20 63 6f    /// managed co
82d0: 64 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 6e  de called from n
82e0: 61 74 69 76 65 20 63 6f 64 65 20 76 69 61 20 64  ative code via d
82f0: 65 6c 65 67 61 74 65 73 2e 0d 0a 20 20 20 20 20  elegates...     
8300: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8310: 0a 20 20 20 20 20 20 4c 6f 67 43 61 6c 6c 62 61  .      LogCallba
8320: 63 6b 45 78 63 65 70 74 69 6f 6e 20 3d 20 30 78  ckException = 0x
8330: 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  8,....      /// 
8340: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
8350: 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67   /// Enable logg
8360: 69 6e 67 20 6f 66 20 62 61 63 6b 75 70 20 41 50  ing of backup AP
8370: 49 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20  I errors...     
8380: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8390: 0a 20 20 20 20 20 20 4c 6f 67 42 61 63 6b 75 70  .      LogBackup
83a0: 20 3d 20 30 78 31 30 2c 0d 0a 0d 0a 20 20 20 20   = 0x10,....    
83b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
83c0: 0a 20 20 20 20 20 20 2f 2f 2f 20 53 6b 69 70 20  .      /// Skip 
83d0: 61 64 64 69 6e 67 20 74 68 65 20 65 78 74 65 6e  adding the exten
83e0: 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 70  sion functions p
83f0: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 6e  rovided by the n
8400: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  ative..      ///
8410: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
8420: 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  y...      /// </
8430: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8440: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
8450: 69 6f 6e 73 20 3d 20 30 78 32 30 2c 0d 0a 0d 0a  ions = 0x20,....
8460: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8470: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57  ry>..      /// W
8480: 68 65 6e 20 62 69 6e 64 69 6e 67 20 70 61 72 61  hen binding para
8490: 6d 65 74 65 72 20 76 61 6c 75 65 73 20 77 69 74  meter values wit
84a0: 68 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  h the <see cref=
84b0: 22 55 49 6e 74 33 32 22 20 2f 3e 0d 0a 20 20 20  "UInt32" />..   
84c0: 20 20 20 2f 2f 2f 20 74 79 70 65 2c 20 75 73 65     /// type, use
84d0: 20 74 68 65 20 69 6e 74 65 72 6f 70 20 6d 65 74   the interop met
84e0: 68 6f 64 20 74 68 61 74 20 61 63 63 65 70 74 73  hod that accepts
84f0: 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
8500: 6e 74 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20 20  nt64" />..      
8510: 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  /// value...    
8520: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8530: 0d 0a 20 20 20 20 20 20 42 69 6e 64 55 49 6e 74  ..      BindUInt
8540: 33 32 41 73 49 6e 74 36 34 20 3d 20 30 78 34 30  32AsInt64 = 0x40
8550: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
8560: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8570: 2f 2f 2f 20 57 68 65 6e 20 62 69 6e 64 69 6e 67  /// When binding
8580: 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65   parameter value
8590: 73 2c 20 61 6c 77 61 79 73 20 62 69 6e 64 20 74  s, always bind t
85a0: 68 65 6d 20 61 73 20 74 68 6f 75 67 68 20 74 68  hem as though th
85b0: 65 79 20 77 65 72 65 0d 0a 20 20 20 20 20 20 2f  ey were..      /
85c0: 2f 2f 20 70 6c 61 69 6e 20 74 65 78 74 20 28 69  // plain text (i
85d0: 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69 63 2c 20  .e. no numeric, 
85e0: 64 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f 74  date/time, or ot
85f0: 68 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  her conversions 
8600: 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 2f 2f  should..      //
8610: 2f 20 62 65 20 61 74 74 65 6d 70 74 65 64 29 2e  / be attempted).
8620: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
8630: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 42 69  mmary>..      Bi
8640: 6e 64 41 6c 6c 41 73 54 65 78 74 20 3d 20 30 78  ndAllAsText = 0x
8650: 38 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  80,....      ///
8660: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8670: 20 20 2f 2f 2f 20 57 68 65 6e 20 72 65 74 75 72    /// When retur
8680: 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ning column valu
8690: 65 73 2c 20 61 6c 77 61 79 73 20 72 65 74 75 72  es, always retur
86a0: 6e 20 74 68 65 6d 20 61 73 20 74 68 6f 75 67 68  n them as though
86b0: 20 74 68 65 79 20 77 65 72 65 0d 0a 20 20 20 20   they were..    
86c0: 20 20 2f 2f 2f 20 70 6c 61 69 6e 20 74 65 78 74    /// plain text
86d0: 20 28 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69   (i.e. no numeri
86e0: 63 2c 20 64 61 74 65 2f 74 69 6d 65 2c 20 6f 72  c, date/time, or
86f0: 20 6f 74 68 65 72 20 63 6f 6e 76 65 72 73 69 6f   other conversio
8700: 6e 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  ns should..     
8710: 20 2f 2f 2f 20 62 65 20 61 74 74 65 6d 70 74 65   /// be attempte
8720: 64 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  d)...      /// <
8730: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8740: 20 47 65 74 41 6c 6c 41 73 54 65 78 74 20 3d 20   GetAllAsText = 
8750: 30 78 31 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  0x100,....      
8760: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8770: 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69       /// When bi
8780: 6e 64 69 6e 67 20 61 6e 64 20 72 65 74 75 72 6e  nding and return
8790: 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ing column value
87a0: 73 2c 20 61 6c 77 61 79 73 20 74 72 65 61 74 20  s, always treat 
87b0: 74 68 65 6d 20 61 73 20 74 68 6f 75 67 68 0d 0a  them as though..
87c0: 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 79 20 77        /// they w
87d0: 65 72 65 20 70 6c 61 69 6e 20 74 65 78 74 20 28  ere plain text (
87e0: 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69 63 2c  i.e. no numeric,
87f0: 20 64 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f   date/time, or o
8800: 74 68 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73  ther conversions
8810: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75  ..      /// shou
8820: 6c 64 20 62 65 20 61 74 74 65 6d 70 74 65 64 29  ld be attempted)
8830: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
8840: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 42  ummary>..      B
8850: 69 6e 64 41 6e 64 47 65 74 41 6c 6c 41 73 54 65  indAndGetAllAsTe
8860: 78 74 20 3d 20 42 69 6e 64 41 6c 6c 41 73 54 65  xt = BindAllAsTe
8870: 78 74 20 7c 20 47 65 74 41 6c 6c 41 73 54 65 78  xt | GetAllAsTex
8880: 74 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  t,....      /// 
8890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
88a0: 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 61 6c 6c 20   /// Enable all 
88b0: 6c 6f 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20  logging...      
88c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
88d0: 20 20 20 20 20 20 4c 6f 67 41 6c 6c 20 3d 20 4c        LogAll = L
88e0: 6f 67 50 72 65 70 61 72 65 20 7c 20 4c 6f 67 50  ogPrepare | LogP
88f0: 72 65 42 69 6e 64 20 7c 20 4c 6f 67 42 69 6e 64  reBind | LogBind
8900: 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   |..            
8910: 20 20 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78     LogCallbackEx
8920: 63 65 70 74 69 6f 6e 20 7c 20 4c 6f 67 42 61 63  ception | LogBac
8930: 6b 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  kup,....      //
8940: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8950: 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
8960: 6c 74 20 65 78 74 72 61 20 66 6c 61 67 73 20 66  lt extra flags f
8970: 6f 72 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f  or new connectio
8980: 6e 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ns...      /// <
8990: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
89a0: 20 44 65 66 61 75 6c 74 20 3d 20 4c 6f 67 43 61   Default = LogCa
89b0: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 0d  llbackException.
89c0: 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 20 54 68 65  .  }....  // The
89d0: 73 65 20 61 72 65 20 74 68 65 20 6f 70 74 69 6f  se are the optio
89e0: 6e 73 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e  ns to the intern
89f0: 61 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  al sqlite3_confi
8a00: 67 20 63 61 6c 6c 2e 0d 0a 20 20 69 6e 74 65 72  g call...  inter
8a10: 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 43  nal enum SQLiteC
8a20: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 0d 0a 20 20  onfigOpsEnum..  
8a30: 7b 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f  {..    SQLITE_CO
8a40: 4e 46 49 47 5f 4e 4f 4e 45 20 3d 20 30 2c 20 2f  NFIG_NONE = 0, /
8a50: 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49  / nil ..    SQLI
8a60: 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45  TE_CONFIG_SINGLE
8a70: 54 48 52 45 41 44 20 3d 20 31 2c 20 2f 2f 20 6e  THREAD = 1, // n
8a80: 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  il ..    SQLITE_
8a90: 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45  CONFIG_MULTITHRE
8aa0: 41 44 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 20 0d  AD = 2, // nil .
8ab0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
8ac0: 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d 20  IG_SERIALIZED = 
8ad0: 33 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20  3, // nil ..    
8ae0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41  SQLITE_CONFIG_MA
8af0: 4c 4c 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71 6c  LLOC = 4, // sql
8b00: 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
8b10: 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  * ..    SQLITE_C
8b20: 4f 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20  ONFIG_GETMALLOC 
8b30: 3d 20 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f  = 5, // sqlite3_
8b40: 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20  mem_methods* .. 
8b50: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
8b60: 5f 53 43 52 41 54 43 48 20 3d 20 36 2c 20 2f 2f  _SCRATCH = 6, //
8b70: 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a 2c 20   void*, int sz, 
8b80: 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51 4c 49  int N ..    SQLI
8b90: 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41  TE_CONFIG_PAGECA
8ba0: 43 48 45 20 3d 20 37 2c 20 2f 2f 20 76 6f 69 64  CHE = 7, // void
8bb0: 2a 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20 4e  *, int sz, int N
8bc0: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
8bd0: 4e 46 49 47 5f 48 45 41 50 20 3d 20 38 2c 20 2f  NFIG_HEAP = 8, /
8be0: 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 6e 42 79  / void*, int nBy
8bf0: 74 65 2c 20 69 6e 74 20 6d 69 6e 20 0d 0a 20 20  te, int min ..  
8c00: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
8c10: 4d 45 4d 53 54 41 54 55 53 20 3d 20 39 2c 20 2f  MEMSTATUS = 9, /
8c20: 2f 20 62 6f 6f 6c 65 61 6e 20 0d 0a 20 20 20 20  / boolean ..    
8c30: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
8c40: 54 45 58 20 3d 20 31 30 2c 20 2f 2f 20 73 71 6c  TEX = 10, // sql
8c50: 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
8c60: 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  ds* ..    SQLITE
8c70: 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45 58  _CONFIG_GETMUTEX
8c80: 20 3d 20 31 31 2c 20 2f 2f 20 73 71 6c 69 74 65   = 11, // sqlite
8c90: 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 2a  3_mutex_methods*
8ca0: 20 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69 6f   ..    // previo
8cb0: 75 73 6c 79 20 53 51 4c 49 54 45 5f 43 4f 4e 46  usly SQLITE_CONF
8cc0: 49 47 5f 43 48 55 4e 4b 41 4c 4c 4f 43 20 31 32  IG_CHUNKALLOC 12
8cd0: 20 77 68 69 63 68 20 69 73 20 6e 6f 77 20 75 6e   which is now un
8ce0: 75 73 65 64 0d 0a 20 20 20 20 53 51 4c 49 54 45  used..    SQLITE
8cf0: 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44  _CONFIG_LOOKASID
8d00: 45 20 3d 20 31 33 2c 20 2f 2f 20 69 6e 74 20 69  E = 13, // int i
8d10: 6e 74 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  nt ..    SQLITE_
8d20: 43 4f 4e 46 49 47 5f 50 43 41 43 48 45 20 3d 20  CONFIG_PCACHE = 
8d30: 31 34 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70  14, // sqlite3_p
8d40: 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d  cache_methods* .
8d50: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
8d60: 49 47 5f 47 45 54 50 43 41 43 48 45 20 3d 20 31  IG_GETPCACHE = 1
8d70: 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63  5, // sqlite3_pc
8d80: 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a  ache_methods* ..
8d90: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
8da0: 47 5f 4c 4f 47 20 3d 20 31 36 2c 20 2f 2f 20 78  G_LOG = 16, // x
8db0: 46 75 6e 63 2c 20 76 6f 69 64 2a 20 0d 0a 20 20  Func, void* ..  
8dc0: 7d 0d 0a 0d 0a 7d 0d 0a                          }....}..