System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4eb6a9439a59deebbff7365a4713c6c4c4d44d3f:


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 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   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 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0690: 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
06a0: 69 73 20 75 73 65 64 20 74 6f 20 72 65 66 65 72  is used to refer
06b0: 20 74 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   to memory alloc
06c0: 61 74 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ated for the..  
06d0: 20 20 2f 2f 2f 20 53 51 4c 49 54 45 5f 44 42 43    /// SQLITE_DBC
06e0: 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45  ONFIG_MAINDBNAME
06f0: 20 76 61 6c 75 65 20 75 73 65 64 20 77 69 74 68   value used with
0700: 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20   the native..   
0710: 20 2f 2f 2f 20 22 73 71 6c 69 74 65 33 5f 64 62   /// "sqlite3_db
0720: 5f 63 6f 6e 66 69 67 22 20 41 50 49 2e 20 20 49  _config" API.  I
0730: 66 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  f allocated, the
0740: 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
0750: 20 2f 2f 2f 20 6d 65 6d 65 6f 72 79 20 77 69 6c   /// memeory wil
0760: 6c 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  l be freed when 
0770: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0780: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20  onnection is..  
0790: 20 20 2f 2f 2f 20 63 6c 6f 73 65 64 2e 0d 0a 20    /// closed... 
07a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07b0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 49  >..    private I
07c0: 6e 74 50 74 72 20 64 62 4e 61 6d 65 20 3d 20 49  ntPtr dbName = I
07d0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
07e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f     //..    // NO
07f0: 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
0800: 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20 74  public key for t
0810: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
0820: 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e 20  QLite assembly. 
0830: 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20 74   If you change t
0840: 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20 20  he..    //      
0850: 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20 77   SNK file, you w
0860: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61 6e  ill need to chan
0870: 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c 2e  ge this as well.
0880: 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69 6e  ..    //..    in
0890: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
08a0: 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d 0d  ing PublicKey =.
08b0: 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30 30  .        "002400
08c0: 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30 30  0004800000940000
08d0: 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30 30  0006020000002400
08e0: 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30 30  0052534131000400
08f0: 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38 38  000100010005a288
0900: 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a 20  de5687c4e1" +.. 
0910: 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66 66         "b621ddff
0920: 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39 39  5d84472741895699
0930: 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34 31  7f475eb829429e41
0940: 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64 65  1aff3e93f97b70de
0950: 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64 64  698b972640925bdd
0960: 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20 20  44280df0" +..   
0970: 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36 36       "a25a843266
0980: 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37 34  973704137cbb0e74
0990: 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34 30  41c1fe7cae4e2440
09a0: 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66 65  ae91ab8cde3933fe
09b0: 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30 65  bcb1ac48dd33b40e
09c0: 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20 20  13c421" +..     
09d0: 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33 34     "d8215c18a434
09e0: 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38 35  9a436dd499e3c385
09f0: 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63 31  cc683015f886f6c1
0a00: 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31 62  0bd90115eb2bd61b
0a10: 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34 31  67750839e3a19941
0a20: 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21 50  dc9c";....#if !P
0a30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
0a40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69 6e  RAMEWORK..    in
0a50: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
0a60: 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72 73  ing DesignerVers
0a70: 69 6f 6e 20 3d 20 22 31 2e 30 2e 31 30 39 2e 30  ion = "1.0.109.0
0a80: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0a90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0aa0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0ab0: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0ac0: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0ad0: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0ae0: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0af0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0b00: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
0b20: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
0b30: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
0b40: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
0b50: 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74   protected SQLit
0b60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
0b70: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 70 72   _flags;..    pr
0b80: 69 76 61 74 65 20 62 6f 6f 6c 20 5f 73 65 74 4c  ivate bool _setL
0b90: 6f 67 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20  ogCallback;..   
0ba0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
0bb0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
0bc0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0bd0: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  olVersion;..    
0be0: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 63 61 6e  private int _can
0bf0: 63 65 6c 43 6f 75 6e 74 3b 0d 0a 0d 0a 23 69 66  celCount;....#if
0c00: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
0c10: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20  40 || NET_45 || 
0c20: 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34  NET_451 || NET_4
0c30: 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20  52 || NET_46 || 
0c40: 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34  NET_461 || NET_4
0c50: 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20  62 || NET_47 || 
0c60: 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45 54 5f 34  NET_471 || NET_4
0c70: 37 32 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  72) && !PLATFORM
0c80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0c90: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0ca0: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0cb0: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0cc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0ce0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0cf0: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0d00: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0d10: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0d20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0d30: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0d40: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0d50: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0d60: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0d70: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0d80: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0d90: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0da0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0db0: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
0dc0: 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
0dd0: 69 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74  ibrary file that
0de0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the.. 
0df0: 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20     /// "vtshim" 
0e00: 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70  extension [wrapp
0e10: 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  er]...    /// </
0e20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0e30: 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f  otected string _
0e40: 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c  shimExtensionFil
0e50: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
0e60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0e70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
0e80: 20 69 73 20 74 68 65 20 66 6c 61 67 20 69 6e 64   is the flag ind
0e90: 69 63 61 74 65 20 77 68 65 74 68 65 72 20 74 68  icate whether th
0ea0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
0eb0: 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20 20 20   file that..    
0ec0: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  /// contains the
0ed0: 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73   "vtshim" extens
0ee0: 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79 6e 61  ion must be dyna
0ef0: 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
0f00: 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
0f10: 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f 20 75  class prior to u
0f20: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0f40: 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68  tected bool? _sh
0f50: 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  imIsLoadNeeded =
0f60: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   null;....    //
0f70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0f80: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0f90: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0fa0: 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ive entry point 
0fb0: 66 6f 72 20 74 68 65 20 22 76 74 73 68 69 6d 22  for the "vtshim"
0fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
0fd0: 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a  ion [wrapper]...
0fe0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ff0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
1000: 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78  d string _shimEx
1010: 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
1020: 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  = "sqlite3_vtshi
1030: 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20  m_init";....    
1040: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1050: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
1060: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
1070: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1080: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1090: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
10a0: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
10b0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
10c0: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
10d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1140: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1150: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
1160: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
1170: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
1180: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
1190: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11a0: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
11b0: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
11c0: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
11d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11f0: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
1200: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
1210: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
1220: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
1230: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
1240: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
1250: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
1260: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
1270: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
1280: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1290: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
12a0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
12b0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
12c0: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
12d0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
12e0: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
12f0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1300: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1310: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1320: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
1330: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
1340: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1350: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
1360: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
1370: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
1380: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1390: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
13a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
13b0: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
13c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
13d0: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
13e0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1400: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
1410: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1420: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1430: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
1440: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
1450: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
1460: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1470: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
1480: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
1490: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14b0: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
14c0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
14d0: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
14e0: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
14f0: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1500: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
1510: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
1520: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
1530: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
1540: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
1550: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1560: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1570: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1580: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1590: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
15a0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
15b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
15c0: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
15d0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
15e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
15f0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1600: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
1610: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1620: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
1630: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
1640: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1650: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
1660: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1680: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1690: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
16a0: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
16b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
16c0: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
16d0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
16e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
16f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1700: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1710: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1730: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1740: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
1750: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1770: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75    null, null, nu
1780: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1790: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
17a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17b0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
17c0: 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20  e3), fmt, kind, 
17d0: 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66  fmtString, db, f
17e0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
17f0: 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e            ownHan
1800: 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  dle }));..      
1810: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1890: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
18a0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
18b0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18c0: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
18d0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
18e0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
18f0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
1900: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
1910: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
1920: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
1930: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1940: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1950: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1960: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1970: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1980: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19f0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
1a00: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
1a10: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
1a20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a30: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a50: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1a60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1a80: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ab0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1af0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1b00: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1b10: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1b60: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1bb0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1bc0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1bd0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
1c20: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1c30: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1c40: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1c50: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 43 6c 6f 73 65 28 74 72 75 65 29 3b 20 2f 2a 20  Close(true); /* 
1c80: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1c90: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1ca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1cc0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1ce0: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1cf0: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1d00: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d10: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d20: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
1d30: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
1d40: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
1d50: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
1d60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d70: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1d80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1da0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1e10: 20 44 45 42 55 47 0d 0a 20 20 20 20 70 75 62 6c   DEBUG..    publ
1e20: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
1e30: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
1e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1e50: 74 75 72 6e 20 48 65 6c 70 65 72 4d 65 74 68 6f  turn HelperMetho
1e60: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
1e80: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1e90: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 66 69 6c  antCulture, "fil
1ea0: 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 6c 61  eName = {0}, fla
1eb0: 67 73 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  gs = {1}",..    
1ec0: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
1ed0: 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20 20  e, _flags);..   
1ee0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1ef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1f60: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1f70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1f80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1f90: 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
1fa0: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c  to dispose of al
1fb0: 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
1fc0: 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f  "SQLiteModule" /
1fd0: 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f  > derived..    /
1fe0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
1ff0: 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73  ces currently as
2000: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
2010: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
2020: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
2030: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2040: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  >..    private v
2050: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
2060: 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
2070: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2080: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79   // NOTE: If any
2090: 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72   modules were cr
20a0: 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74  eated, attempt t
20b0: 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20  o dispose of..  
20c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
20d0: 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63  hem now.  This c
20e0: 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  ode is designed 
20f0: 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e  to avoid throwin
2100: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  g..        //   
2110: 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75      exceptions u
2120: 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73  nless the Dispos
2130: 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  e method of the 
2140: 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
2150: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
2160: 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  throws an except
2170: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
2180: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d  ..        if (_m
2190: 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  odules != null).
21a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21b0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
21c0: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74  (KeyValuePair<st
21d0: 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75  ring, SQLiteModu
21e0: 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64  le> pair in _mod
21f0: 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ules)..         
2200: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2210: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
2220: 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72  le module = pair
2230: 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  .Value;....     
2240: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2250: 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
2280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2290: 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
22a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22c0: 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28   _modules.Clear(
22d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
22e0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
22f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
2360: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
2370: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
2380: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
2390: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
23a0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
23b0: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
23c0: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
23d0: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
23e0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
23f0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
2400: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
2410: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
2420: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
2430: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
2440: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
2450: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
2460: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
2470: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
2480: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
2490: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
24a0: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
24b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
24c0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
24d0: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
24e0: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
24f0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2500: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
2510: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
2520: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
2530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2540: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2550: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
2560: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
2570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2580: 20 20 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e        bool unbin
2590: 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f  dFunctions = ((_
25a0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
25b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e  nnectionFlags.Un
25c0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43  bindFunctionsOnC
25d0: 6c 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lose)..         
25e0: 20 20 20 20 20 20 20 3d 3d 20 53 51 4c 69 74 65         == SQLite
25f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
2600: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f  UnbindFunctionsO
2610: 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  nClose);....    
2620: 20 20 72 65 74 72 79 3a 0d 0a 0d 0a 20 20 20 20    retry:....    
2630: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
2640: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
2650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2660: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
2670: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
2680: 73 71 6c 2c 20 5f 73 71 6c 2c 20 21 64 69 73 70  sql, _sql, !disp
2690: 6f 73 69 6e 67 29 20 26 26 0d 0a 20 20 20 20 20  osing) &&..     
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 68               Unh
26b0: 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63  ookNativeCallbac
26c0: 6b 73 28 74 72 75 65 2c 20 21 64 69 73 70 6f 73  ks(true, !dispos
26d0: 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
26e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
2700: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2730: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
2740: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
2750: 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73  bindAllFunctions
2760: 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66  (this, _flags, f
2770: 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2790: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
27a0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
27b0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
27e0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
27f0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2820: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2830: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e            "Unbin
2860: 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c  dFunctions (Pool
2870: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
28b0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2900: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2910: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2920: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2930: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2950: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
2960: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
2970: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
29a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
29b0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d0: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
29e0: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61 69 6c  ions (Pool) Fail
29f0: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a10: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2a20: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2a30: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
2a70: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a90: 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c      DisposeModul
2aa0: 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  es();..#endif...
2ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2ad0: 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c  ionPool.Add(_fil
2ae0: 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f  eName, _sql, _po
2af0: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  olVersion);.... 
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2b20: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
2b30: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
2b40: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
2b70: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
2b80: 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20  edToPool, null, 
2b90: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
2bb0: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 5f  l, null, _sql, _
2bc0: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
2bd0: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
2c00: 20 21 64 69 73 70 6f 73 69 6e 67 2c 20 5f 66 69   !disposing, _fi
2c10: 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65 72  leName, _poolVer
2c20: 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66  sion }));....#if
2c30: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2c40: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2c50: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2c60: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2c70: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2c80: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2c90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2ca0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2cb0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2cc0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
2ce0: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
2cf0: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d10: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2d20: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2d50: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2d60: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2d70: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2d80: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2db0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2dc0: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2df0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e10: 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f        "Close (Po
2e20: 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d  ol) Failure: {0}
2e30: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e40: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2e50: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2e60: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e90: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 63   // NOTE: This c
2ea0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e 6f 74  onnection cannot
2eb0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
2ec0: 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 20 20   pool;..        
2ed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2ee0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75     therefore, ju
2ef0: 73 74 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  st use the norma
2f00: 6c 20 64 69 73 70 6f 73 61 6c 0d 0a 20 20 20 20  l disposal..    
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f20: 20 20 20 20 20 20 20 70 72 6f 63 65 64 75 72 65         procedure
2f30: 20 6f 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20   on it...       
2f40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
2f70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f80: 20 20 20 20 20 20 67 6f 74 6f 20 72 65 74 72 79        goto retry
2f90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
2fc0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2fe0: 47 4e 4f 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  GNORED */..     
2ff0: 20 20 20 20 20 20 20 20 20 55 6e 68 6f 6f 6b 4e           UnhookN
3000: 61 74 69 76 65 43 61 6c 6c 62 61 63 6b 73 28 64  ativeCallbacks(d
3010: 69 73 70 6f 73 69 6e 67 2c 20 21 64 69 73 70 6f  isposing, !dispo
3020: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
3030: 20 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69          if (unbi
3040: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  ndFunctions)..  
3050: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3070: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
3080: 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e  ion.UnbindAllFun
3090: 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c  ctions(this, _fl
30a0: 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  ags, false))..  
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
30d0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
30e0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3100: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
3110: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
3120: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3140: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
3150: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
3160: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3180: 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73  "UnbindFunctions
3190: 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d   Success: {0}",.
31a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b0: 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
31c0: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
31d0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
31e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
3200: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3210: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
3220: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
3230: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
3240: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
3250: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
3260: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
3270: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
3280: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
32b0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d0: 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75         "UnbindFu
32e0: 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72 65 3a  nctions Failure:
32f0: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
3320: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3350: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3360: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
3370: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
3380: 20 20 20 20 20 20 46 72 65 65 44 62 4e 61 6d 65        FreeDbName
3390: 28 21 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20  (!disposing);.. 
33a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33b0: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c        _sql = nul
33c0: 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  l;..      }..   
33d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
3440: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
3450: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
3460: 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63  TION..    protec
3470: 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c  ted string Handl
3480: 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20  eToString()..   
3490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
34a0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34c0: 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
34d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73         return _s
34e0: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  ql.ToString();..
34f0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
3500: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3560: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
3570: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3580: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
3590: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
35a0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61  he <see cref="Ca
35b0: 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20  ncel" /> method 
35c0: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
35d0: 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f  / called...    /
35e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
35f0: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 47     private int G
3600: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d  etCancelCount().
3610: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3620: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
3630: 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e  ed.CompareExchan
3640: 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f  ge(ref _cancelCo
3650: 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20  unt, 0, 0);..   
3660: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
36e0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
36f0: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  hod determines w
3700: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
3710: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3720: 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a  eException" />..
3730: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72      /// with a r
3740: 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73  eturn code of <s
3750: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45  ee cref="SQLiteE
3760: 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75  rrorCode.Interru
3770: 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20  pt" /> should.. 
3780: 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e     /// be thrown
3790: 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20   after making a 
37a0: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51  call into the SQ
37b0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
37c0: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
37d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
37e0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
37f0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  // Non-zero if a
3800: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
3810: 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20  teException" /> 
3820: 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54  to be thrown.  T
3830: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
3840: 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65  /// will only re
3850: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
3860: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
3870: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
3880: 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20  d was called..  
3890: 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72    /// one or mor
38a0: 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61  e times during a
38b0: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53   call into the S
38c0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
38d0: 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20  ry (e.g. when.. 
38e0: 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74     /// the sqlit
38f0: 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72  e3_prepare*() or
3900: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
3910: 41 50 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d  APIs are used)..
3920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
3930: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
3940: 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f   bool ShouldThro
3950: 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20  wForCancel()..  
3960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
3970: 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75  urn GetCancelCou
3980: 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d  nt() > 0;..    }
3990: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
3a00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3a10: 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65    /// Resets the
3a20: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73   value of the <s
3a30: 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c  ee cref="_cancel
3a40: 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e  Count" /> field.
3a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3a60: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
3a70: 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65  e int ResetCance
3a80: 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d  lCount()..    {.
3a90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3aa0: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70  Interlocked.Comp
3ab0: 61 72 65 45 78 63 68 61 6e 67 65 28 72 65 66 20  areExchange(ref 
3ac0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c  _cancelCount, 0,
3ad0: 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d   _cancelCount);.
3ae0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3b50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3b60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65  y>..    /// Atte
3b70: 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70  mpts to interrup
3b80: 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72  t the query curr
3b90: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
3ba0: 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  on the associate
3bb0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76  d..    /// nativ
3bc0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3bd0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
3be0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3bf0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3c00: 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d  e void Cancel().
3c10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72  .    {..      tr
3c20: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
3c30: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
3c40: 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  g...      }..   
3c50: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
3c60: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
3c70: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
3c80: 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  /..      {..    
3c90: 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e      Interlocked.
3ca0: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63  Increment(ref _c
3cb0: 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20  ancelCount);..  
3cc0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
3cd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ce0: 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c  3_interrupt(_sql
3cf0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
3d00: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3d10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3d20: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62   This function b
3d30: 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69  inds a user-defi
3d40: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ned function to 
3d50: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
3d60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3d70: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3d80: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3d90: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20  onAttribute">.. 
3da0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
3db0: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
3dc0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e  tionAttribute"/>
3dd0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
3de0: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
3df0: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74   /// the metadat
3e00: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  a for the functi
3e10: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
3e20: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3e30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3e40: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
3e50: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3e60: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3e70: 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a  eFunction"/> obj
3e80: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61  ect instance tha
3e90: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
3ea0: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
3eb0: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
3ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3ed0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3ee0: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
3ef0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
3f00: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
3f10: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
3f20: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
3f30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3f40: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
3f50: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
3f60: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
3f70: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
3f80: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
3f90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
3fa0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3fb0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  Function functio
3fc0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n,..        SQLi
3fd0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3fe0: 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
3ff0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
4000: 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41     if (functionA
4010: 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c  ttribute == null
4020: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
4030: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
4040: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
4050: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
4060: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
4070: 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20  if (function == 
4080: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4090: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
40a0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
40b0: 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d  on("function");.
40c0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
40d0: 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75  eFunction.BindFu
40e0: 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e  nction(this, fun
40f0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
4100: 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29  function, flags)
4110: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
4120: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
4130: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4140: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e    _functions = n
4150: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ew Dictionary<SQ
4160: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
4170: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
4180: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
4190: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
41a0: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
41b0: 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a  e] = function;..
41c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
41d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
41e0: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
41f0: 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64  n binds a user-d
4200: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
4210: 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  to the connectio
4220: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
4230: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4240: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
4250: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e  ctionAttribute">
4260: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
4270: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
4280: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4290: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
42a0: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  nce containing..
42b0: 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61      /// the meta
42c0: 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e  data for the fun
42d0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f  ction to be unbo
42e0: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
42f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4300: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
4310: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
4320: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
4330: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
4340: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
4350: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
4360: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4370: 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65   <returns>Non-ze
4380: 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69  ro if the functi
4390: 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61  on was unbound a
43a0: 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74  nd removed.</ret
43b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
43c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
43d0: 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  l UnbindFunction
43e0: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
43f0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
4400: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
4410: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
4420: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4430: 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20  lags flags..    
4440: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
4450: 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69        if (functi
4460: 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e  onAttribute == n
4470: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4480: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
4490: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
44a0: 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  n("functionAttri
44b0: 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  bute");....     
44c0: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
44d0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
44e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
44f0: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
4500: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
4510: 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  function;....   
4520: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
4530: 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ons.TryGetValue(
4540: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
4550: 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29  e, out function)
4560: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4570: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51            if (SQ
4580: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62  LiteFunction.Unb
4590: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e    this, function
45c0: 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74  Attribute, funct
45d0: 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a  ion, flags) &&..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76  _functions.Remov
4600: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4610: 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ute))..         
4620: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4630: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
4640: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4650: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4660: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
4670: 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
4680: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4690: 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72  rride string Ver
46a0: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
46b0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
46c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
46d0: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a  SQLiteVersion;..
46e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
46f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4700: 76 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73  verride int Vers
4710: 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b  ionNumber..    {
4720: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4730: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4740: 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69  turn SQLiteVersi
4750: 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20  onNumber;..     
4760: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4770: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4780: 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f   string DefineCo
4790: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a  nstants..    {..
47a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
47b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
47c0: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
47d0: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
47e0: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
47f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c 69  .            ILi
4800: 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20  st<string> list 
4810: 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  = SQLiteDefineCo
4820: 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69  nstants.OptionLi
4830: 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
4840: 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e     if (list != n
4850: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4870: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
4880: 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20  ring element in 
4890: 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  list)..         
48a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
48c0: 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c   (element == nul
48d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
48f0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4910: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
4920: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
4930: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
4940: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
4950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4960: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4970: 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  ppend(element);.
4980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4990: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
49a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
49b0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
49c0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
49d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
49e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
49f0: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4a00: 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d  eVersion..    {.
4a10: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
4a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
4a30: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4a40: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4a50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
4a60: 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d  version(), -1);.
4a70: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4a80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4a90: 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74  static int SQLit
4aa0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a  eVersionNumber..
4ab0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4ac0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4ad0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
4ae0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4af0: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
4b00: 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20  _number();..    
4b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4b20: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4b30: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53  c string SQLiteS
4b40: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
4b50: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
4b70: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4b80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4b90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72  ods.sqlite3_sour
4ba0: 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20  ceid(), -1);..  
4bb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4bc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4bd0: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4be0: 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d  eCompileOptions.
4bf0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4c00: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
4c20: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
4c30: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
4c40: 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lder();..       
4c50: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
4c60: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
4c70: 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d   IntPtr zValue =
4c80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4c90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
4ca0: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
4cb0: 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20  ndex++);....    
4cc0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a          while (z
4cd0: 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e  Value != IntPtr.
4ce0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
4cf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4d00: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
4d10: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d30: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
4d40: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4d50: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4d60: 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72  Append(UTF8ToStr
4d70: 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29  ing(zValue, -1))
4d80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4d90: 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61     zValue = Unsa
4da0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4db0: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
4dc0: 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b  ption_get(index+
4dd0: 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  +);..           
4de0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4df0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
4e00: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
4e10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4e20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4e30: 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65  atic string Inte
4e40: 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ropVersion..    
4e50: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4e60: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4e70: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4e90: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4ea0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4eb0: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62  hods.interop_lib
4ec0: 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d  version(), -1);.
4ed0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
4ee0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
4ef0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4f00: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4f10: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4f20: 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70  c string Interop
4f30: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
4f40: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
4f50: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
4f60: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4f70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4f80: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
4f90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4fa0: 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63  ds.interop_sourc
4fb0: 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c  eid(), -1);..#el
4fc0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4fd0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65  return null;..#e
4fe0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
4ff0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5000: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
5010: 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70  ring InteropComp
5020: 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20  ileOptions..    
5030: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
5040: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
5050: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72  .            Str
5070: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
5080: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
5090: 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  ilder();..      
50a0: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
50b0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
50c0: 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20    IntPtr zValue 
50d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
50e0: 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f  thods.interop_co
50f0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
5100: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20  index++);....   
5110: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
5120: 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72  zValue != IntPtr
5130: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
5140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5150: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
5160: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
5190: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
51a0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
51b0: 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74  .Append(UTF8ToSt
51c0: 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29  ring(zValue, -1)
51d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
51e0: 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73      zValue = Uns
51f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5200: 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65  .interop_compile
5210: 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78  option_get(index
5220: 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ++);..          
5230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5240: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5250: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65  .ToString();..#e
5260: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
5270: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
5280: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
5290: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
52a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
52b0: 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74   bool AutoCommit
52c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
52d0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
52e0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75       return IsAu
52f0: 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f  tocommit(_sql, _
5300: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sql);..      }..
5310: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5320: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
5330: 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d  ool IsReadOnly(.
5340: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
5350: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  name..        ).
5360: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5370: 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d  IntPtr pDbName =
5380: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
5390: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
53a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
53b0: 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20 21 3d       if (name !=
53c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
53d0: 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20          pDbName 
53e0: 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
53f0: 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
5400: 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
5410: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65            int re
5420: 73 75 6c 74 20 3d 20 55 6e 73 61 66 65 4e 61 74  sult = UnsafeNat
5430: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5440: 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79 28 0d  e3_db_readonly(.
5450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5460: 20 5f 73 71 6c 2c 20 70 44 62 4e 61 6d 65 29 3b   _sql, pDbName);
5470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5480: 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 2d 31  if (result == -1
5490: 29 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 6f  ) /* database no
54a0: 74 20 66 6f 75 6e 64 20 2a 2f 0d 0a 20 20 20 20  t found */..    
54b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
54c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
54d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
54e0: 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
54f0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
5520: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
5530: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5540: 20 20 20 20 20 20 20 22 64 61 74 61 62 61 73 65         "database
5550: 20 5c 22 7b 30 7d 5c 22 20 6e 6f 74 20 66 6f 75   \"{0}\" not fou
5560: 6e 64 22 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20  nd", name));..  
5570: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5580: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5590: 6e 20 72 65 73 75 6c 74 20 3d 3d 20 30 20 3f 20  n result == 0 ? 
55a0: 66 61 6c 73 65 20 3a 20 74 72 75 65 3b 0d 0a 20  false : true;.. 
55b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
55c0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
55d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
55e0: 20 20 69 66 20 28 70 44 62 4e 61 6d 65 20 21 3d    if (pDbName !=
55f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
5600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
5620: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
5630: 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  pDbName);..     
5640: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61             pDbNa
5650: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
5660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5670: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5680: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5690: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
56a0: 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64   LastInsertRowId
56b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
56c0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
56d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
56e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
56f0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
5700: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5710: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
5720: 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b  ert_rowid(_sql);
5730: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
5740: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5750: 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30    long rowId = 0
5760: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
5770: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5780: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
5790: 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  rt_rowid_interop
57a0: 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64  (_sql, ref rowId
57b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
57c0: 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65  rn rowId;..#else
57d0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
57e0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
57f0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
5800: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
5810: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5820: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5830: 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20 20  int Changes..   
5840: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
5850: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
5860: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
5870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
5880: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5890: 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  .sqlite3_changes
58a0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d  _interop(_sql);.
58b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
58c0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
58d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
58e0: 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c 29  e3_changes(_sql)
58f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5900: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5910: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5920: 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73  de long MemoryUs
5930: 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ed..    {..     
5940: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
5950: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
5960: 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f  eturn StaticMemo
5970: 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  ryUsed;..       
5980: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5990: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
59a0: 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f   long StaticMemo
59b0: 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
59c0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
59d0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
59e0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
59f0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
5a00: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
5a10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5a20: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65  lite3_memory_use
5a30: 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  d();..#elif !SQL
5a40: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
5a50: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62            long b
5a60: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
5a70: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
5a80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5a90: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69  e3_memory_used_i
5aa0: 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73  nterop(ref bytes
5ab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5ac0: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
5ad0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5ae0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
5af0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
5b00: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
5b10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
5b20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5b30: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d   override long M
5b40: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
5b50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5b60: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
5b70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5b80: 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69  n StaticMemoryHi
5b90: 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20 20  ghwater;..      
5ba0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
5bb0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
5bc0: 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d  c long StaticMem
5bd0: 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20  oryHighwater..  
5be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5bf0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
5c00: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5c10: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5c20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5c30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5c40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
5c50: 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b  ry_highwater(0);
5c60: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
5c70: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5c80: 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73        long bytes
5c90: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
5ca0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
5cb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
5cc0: 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f  emory_highwater_
5cd0: 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62  interop(0, ref b
5ce0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
5cf0: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
5d00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5d10: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
5d20: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
5d30: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
5d40: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
5d50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5d60: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5d70: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
5d80: 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65 72  ero if the under
5d90: 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e  lying native con
5da0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
5db0: 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f  s owned..    ///
5dc0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e 63   by this instanc
5dd0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
5de0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
5df0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
5e00: 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20  ol OwnHandle..  
5e10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5e20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5e30: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71           if (_sq
5e40: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
5e60: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5e70: 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63  ption("no connec
5e80: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69  tion handle avai
5e90: 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  lable");....    
5ea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5eb0: 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a  sql.OwnHandle;..
5ec0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
5ed0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5ee0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
5ef0: 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69 63  eturns the logic
5f00: 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74  al list of funct
5f10: 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64 20  ions associated 
5f20: 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63  with this connec
5f30: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
5f40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
5f50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5f60: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
5f70: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
5f80: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
5f90: 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73 0d  tion> Functions.
5fa0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5fb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 75  get { return _fu
5fc0: 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  nctions; }..    
5fd0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5fe0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
5ff0: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d 65  eErrorCode SetMe
6000: 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20  moryStatus(bool 
6010: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
6020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
6030: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
6040: 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  tus(value);..   
6050: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6060: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
6070: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
6080: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
6090: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
60a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
60b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
60c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
60d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
60e0: 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20 20  fig_int(..      
60f0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
6100: 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
6110: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
6120: 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20 30  S, value ? 1 : 0
6130: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
6140: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
6150: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6160: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
6170: 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61  tempts to free a
6180: 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d 6f  s much heap memo
6190: 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66  ry as possible f
61a0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
61b0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
61c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
61d0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
61e0: 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s>A standard SQL
61f0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
6200: 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73  (i.e. zero for s
6210: 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a  uccess and non-z
6220: 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  ero for failure)
6230: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
6240: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6250: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
6260: 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  de ReleaseMemory
6270: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
6280: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6290: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
62a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
62b0: 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d  te3_db_release_m
62c0: 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20 20  emory(_sql);..  
62d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
62e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
62f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6300: 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
6310: 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73 20 6f  o free N bytes o
6320: 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62 79  f heap memory by
6330: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f   deallocating no
6340: 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f  n-essential memo
6350: 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f  ry..    /// allo
6360: 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79 20  cations held by 
6370: 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 69 62  the database lib
6380: 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73 65  rary. Memory use
6390: 64 20 74 6f 20 63 61 63 68 65 20 64 61 74 61 62  d to cache datab
63a0: 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20 2f  ase pages..    /
63b0: 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70 65  // to improve pe
63c0: 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e 20  rformance is an 
63d0: 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d 65  example of non-e
63e0: 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 2e  ssential memory.
63f0: 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f    This is a no-o
6400: 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75 72  p..    /// retur
6410: 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68 65  ning zero if the
6420: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
6430: 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f 6d  rary was not com
6440: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 63  piled with the c
6450: 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20 20  ompile-time..   
6460: 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c 49   /// option SQLI
6470: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
6480: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f 70  _MANAGEMENT.  Op
6490: 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d 70  tionally, attemp
64a0: 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64 2f  ts to reset and/
64b0: 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70  or..    /// comp
64c0: 61 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e 61  act the Win32 na
64d0: 74 69 76 65 20 68 65 61 70 2c 20 69 66 20 61 70  tive heap, if ap
64e0: 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  plicable...    /
64f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6500: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6510: 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20 20  me="nBytes">..  
6520: 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65 73    /// The reques
6530: 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  ted number of by
6540: 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20 20  tes to free...  
6550: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
6560: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6570: 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20  ame="reset">..  
6580: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
6590: 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65 61 70  o attempt a heap
65a0: 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f   reset...    ///
65b0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
65c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
65d0: 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20 2f  compact">..    /
65e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61  // Non-zero to a
65f0: 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d 70  ttempt heap comp
6600: 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  action...    ///
6610: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
6620: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6630: 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nFree">..    ///
6640: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
6650: 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66 72  ytes actually fr
6660: 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65  eed.  This value
6670: 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20   may be zero... 
6680: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6690: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
66a0: 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e 0d  name="resetOk">.
66b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61  .    /// This va
66c0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d  lue will be non-
66d0: 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65 61 70  zero if the heap
66e0: 20 72 65 73 65 74 20 77 61 73 20 73 75 63 63 65   reset was succe
66f0: 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssful...    /// 
6700: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6710: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
6720: 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20 2f  Largest">..    /
6730: 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74  // The size of t
6740: 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d 69  he largest commi
6750: 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b 20  tted free block 
6760: 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e 20  in the heap, in 
6770: 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bytes...    /// 
6780: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
6790: 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20 68  be zero unless h
67a0: 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20 69  eap compaction i
67b0: 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20  s enabled...    
67c0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
67d0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
67e0: 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
67f0: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
6800: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
6810: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
6820: 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20 20  d non-zero..    
6830: 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  /// for failure)
6840: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
6850: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
6860: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
6870: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
6880: 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d  cReleaseMemory(.
6890: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 79  .        int nBy
68a0: 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  tes,..        bo
68b0: 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20  ol reset,..     
68c0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74 2c     bool compact,
68d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69 6e  ..        ref in
68e0: 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20 20  t nFree,..      
68f0: 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65 74    ref bool reset
6900: 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  Ok,..        ref
6910: 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d 0a   uint nLargest..
6920: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
6930: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6940: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
6950: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6960: 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  k;....        in
6970: 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20 55  t nFreeLocal = U
6980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6990: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  ds.sqlite3_relea
69a0: 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65 73  se_memory(nBytes
69b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e 74  );..        uint
69c0: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20 3d   nLargestLocal =
69d0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   0;..        boo
69e0: 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d  l resetOkLocal =
69f0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21   false;....#if !
6a00: 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53  DEBUG && WINDOWS
6a10: 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64   // NOTE: Should
6a20: 20 62 65 20 22 57 49 4e 33 32 48 45 41 50 20 26   be "WIN32HEAP &
6a30: 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20 57  & !MEMDEBUG && W
6a40: 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20 20  INDOWS"..       
6a50: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
6a60: 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 29 0d  ds.IsWindows()).
6a70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6a80: 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20          if ((rc 
6a90: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6aa0: 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74 29  de.Ok) && reset)
6ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ad0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
6ae0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6af0: 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f 68 65  3_win32_reset_he
6b00: 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ap();....       
6b10: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
6b20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6b30: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65              rese
6b50: 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b  tOkLocal = true;
6b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6b70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
6b80: 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  f ((rc == SQLite
6b90: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
6ba0: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
6bb0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6bc0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6bd0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
6be0: 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72  2_compact_heap(r
6bf0: 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  ef nLargestLocal
6c00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
6c10: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
6c20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
6c30: 28 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70 61 63  (reset || compac
6c40: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
6c50: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6c60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6c70: 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 20 20 20 20 20  NotFound;..     
6c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6c90: 6e 46 72 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63  nFree = nFreeLoc
6ca0: 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61  al;..        nLa
6cb0: 72 67 65 73 74 20 3d 20 6e 4c 61 72 67 65 73 74  rgest = nLargest
6cc0: 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20  Local;..        
6cd0: 72 65 73 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f  resetOk = resetO
6ce0: 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20  kLocal;....     
6cf0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
6d00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6d10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6d20: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
6d30: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
6d40: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
6d50: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
6d60: 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f  ifferent..    //
6d70: 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  / configuration 
6d80: 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70  options.  We dep
6d90: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
6da0: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
6db0: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
6dc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6dd0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
6de0: 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20  urns a standard 
6df0: 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f  SQLite result co
6e00: 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  de.</returns>.. 
6e10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6e20: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
6e30: 43 6f 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d  Code Shutdown().
6e40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6e50: 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 68 75  return StaticShu
6e60: 74 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20  tdown(false);.. 
6e70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6e80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6e90: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
6ea0: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
6eb0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
6ec0: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
6ed0: 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f  ifferent..    //
6ee0: 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  / configuration 
6ef0: 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70  options.  We dep
6f00: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
6f10: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
6f20: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
6f30: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6f40: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6f50: 22 64 69 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a  "directories">..
6f60: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
6f70: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 61   to reset the da
6f80: 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
6f90: 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
6fa0: 20 74 6f 20 74 68 65 69 72 0d 0a 20 20 20 20 2f   to their..    /
6fb0: 2f 2f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  // default value
6fc0: 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  s, which should 
6fd0: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68  be null for both
6fe0: 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65 74 65  .  This paramete
6ff0: 72 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f  r has no..    //
7000: 2f 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d  / effect on non-
7010: 57 69 6e 64 6f 77 73 20 6f 70 65 72 61 74 69 6e  Windows operatin
7020: 67 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20  g systems...    
7030: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7040: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
7050: 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72  eturns a standar
7060: 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20  d SQLite result 
7070: 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  code.</returns>.
7080: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
7090: 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  atic SQLiteError
70a0: 43 6f 64 65 20 53 74 61 74 69 63 53 68 75 74 64  Code StaticShutd
70b0: 6f 77 6e 28 0d 0a 20 20 20 20 20 20 20 20 62 6f  own(..        bo
70c0: 6f 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a  ol directories..
70d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
70e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
70f0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
7100: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7110: 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  k;....        if
7120: 20 28 64 69 72 65 63 74 6f 72 69 65 73 29 0d 0a   (directories)..
7130: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57          {..#if W
7140: 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
7150: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
7160: 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77 73 28  thods.IsWindows(
7170: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
7180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7190: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
71a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
71b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
71c0: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
71d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
71e0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
71f0: 5f 64 69 72 65 63 74 6f 72 79 28 31 2c 20 6e 75  _directory(1, nu
7200: 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
7210: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
7220: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7230: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
7240: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
7250: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7260: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
7270: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
7280: 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  2, null);..     
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72a0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
72b0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
72c0: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
72d0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
72e0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
7300: 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7320: 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43 61 6e    "Shutdown: Can
7330: 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65 63 74  not reset direct
7340: 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20 70 6c  ories on this pl
7350: 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65 6e 64  atform.");..#end
7360: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
7370: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
7380: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
7390: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
73a0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
73b0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
73c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
73d0: 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d  te3_shutdown();.
73e0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
73f0: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
7400: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7410: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
7420: 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73  mines if the ass
7430: 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63  ociated native c
7440: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7450: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
7460: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7470: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7480: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
7490: 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63 69  ro if the associ
74a0: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
74b0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
74c0: 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20   open...    /// 
74d0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
74e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
74f0: 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d  e bool IsOpen().
7500: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7510: 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20  return (_sql != 
7520: 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49  null) && !_sql.I
7530: 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71  sInvalid && !_sq
7540: 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20  l.IsClosed;..   
7550: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
7560: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7570: 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c   Returns the ful
7580: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74  ly qualified pat
7590: 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20  h and file name 
75a0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c  for the currentl
75b0: 79 20 6f 70 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  y open..    /// 
75c0: 64 61 74 61 62 61 73 65 2c 20 69 66 20 61 6e 79  database, if any
75d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
75e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
75f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62 4e 61  param name="dbNa
7600: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
7610: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 61 74  e name of the at
7620: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
7630: 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f  to query...    /
7640: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7650: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
7660: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c      /// The full
7670: 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68  y qualified path
7680: 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 66   and file name f
7690: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  or the currently
76a0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2c 0d   open database,.
76b0: 0a 20 20 20 20 2f 2f 2f 20 69 66 20 61 6e 79 2e  .    /// if any.
76c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
76d0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
76e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
76f0: 6e 67 20 47 65 74 46 69 6c 65 4e 61 6d 65 28 73  ng GetFileName(s
7700: 74 72 69 6e 67 20 64 62 4e 61 6d 65 29 0d 0a 20  tring dbName).. 
7710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
7720: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
7730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7740: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
7750: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
7760: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
7770: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7780: 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65  ite3_db_filename
7790: 5f 62 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20  _bytes(..       
77a0: 20 20 20 20 20 5f 73 71 6c 2c 20 54 6f 55 54 46       _sql, ToUTF
77b0: 38 28 64 62 4e 61 6d 65 29 29 2c 20 2d 31 29 3b  8(dbName)), -1);
77c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
77d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
77e0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
77f0: 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 65  d attempts to de
7800: 74 65 72 6d 69 6e 65 20 69 66 20 61 20 64 61 74  termine if a dat
7810: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7820: 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f   opened..    ///
7830: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
7840: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
7850: 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e  QLiteOpenFlagsEn
7860: 75 6d 22 20 2f 3e 20 73 68 6f 75 6c 64 20 62 65  um" /> should be
7870: 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 77 65  ..    /// allowe
7880: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6e 6e 65  d into the conne
7890: 63 74 69 6f 6e 20 70 6f 6f 6c 2e 0d 0a 20 20 20  ction pool...   
78a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
78b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
78c0: 6e 61 6d 65 3d 22 6f 70 65 6e 46 6c 61 67 73 22  name="openFlags"
78d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
78e0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
78f0: 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 22 20 2f  OpenFlagsEnum" /
7900: 3e 20 74 68 61 74 20 77 65 72 65 20 73 70 65 63  > that were spec
7910: 69 66 69 65 64 20 77 68 65 6e 20 74 68 65 0d 0a  ified when the..
7920: 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69      /// connecti
7930: 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e 0d 0a  on was opened...
7940: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
7950: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
7960: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  ns>..    /// Non
7970: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63 6f 6e  -zero if the con
7980: 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 28  nection should (
7990: 65 76 65 6e 74 75 61 6c 6c 79 29 20 62 65 20 61  eventually) be a
79a0: 6c 6c 6f 77 65 64 20 69 6e 74 6f 20 74 68 65 0d  llowed into the.
79b0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
79c0: 69 6f 6e 20 70 6f 6f 6c 3b 20 6f 74 68 65 72 77  ion pool; otherw
79d0: 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  ise, zero...    
79e0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
79f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
7a00: 69 63 20 62 6f 6f 6c 20 49 73 41 6c 6c 6f 77 65  ic bool IsAllowe
7a10: 64 54 6f 55 73 65 50 6f 6f 6c 28 0d 0a 20 20 20  dToUsePool(..   
7a20: 20 20 20 20 20 53 51 4c 69 74 65 4f 70 65 6e 46       SQLiteOpenF
7a30: 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61  lagsEnum openFla
7a40: 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  gs..        ).. 
7a50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
7a60: 74 75 72 6e 20 6f 70 65 6e 46 6c 61 67 73 20 3d  turn openFlags =
7a70: 3d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  = SQLiteOpenFlag
7a80: 73 45 6e 75 6d 2e 44 65 66 61 75 6c 74 3b 0d 0a  sEnum.Default;..
7a90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7aa0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
7ab0: 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20  oid Open(string 
7ac0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72  strFilename, str
7ad0: 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c  ing vfsName, SQL
7ae0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7af0: 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  gs connectionFla
7b00: 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c  gs, SQLiteOpenFl
7b10: 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67  agsEnum openFlag
7b20: 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69  s, int maxPoolSi
7b30: 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c  ze, bool usePool
7b40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7b50: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
7b60: 45 3a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  E: If the databa
7b70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
7b80: 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
7b90: 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20   attempt to..   
7ba0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73     //       clos
7bb0: 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20  e it now.  This 
7bc0: 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63  must be done bec
7bd0: 61 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61  ause the file na
7be0: 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20  me or..      // 
7bf0: 20 20 20 20 20 20 6f 74 68 65 72 20 70 61 72 61        other para
7c00: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
7c10: 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65 72  impact the under
7c20: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a  lying database..
7c30: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
7c40: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61  onnection may ha
7c50: 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20  ve changed...   
7c60: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
7c70: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43  (_sql != null) C
7c80: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 0d 0a  lose(false);....
7c90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7ca0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
7cb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e  connection was n
7cc0: 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73  ot closed succes
7cd0: 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e  sfully, throw an
7ce0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
7cf0: 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d   exception now..
7d00: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
7d10: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
7d20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  l)..          th
7d30: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7d40: 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74  ception("connect
7d50: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74  ion handle is st
7d60: 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d  ill active");...
7d70: 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20  .      _usePool 
7d80: 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 0d 0a 20 20  = usePool;....  
7d90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
7da0: 20 42 55 47 46 49 58 3a 20 44 6f 20 6e 6f 74 20   BUGFIX: Do not 
7db0: 61 6c 6c 6f 77 20 61 20 63 6f 6e 6e 65 63 74 69  allow a connecti
7dc0: 6f 6e 20 69 6e 74 6f 20 74 68 65 20 70 6f 6f 6c  on into the pool
7dd0: 20 69 66 20 69 74 20 77 61 73 20 6f 70 65 6e 65   if it was opene
7de0: 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  d..      //     
7df0: 20 20 20 20 77 69 74 68 20 66 6c 61 67 73 20 74      with flags t
7e00: 68 61 74 20 61 72 65 20 69 6e 63 6f 6d 70 61 74  hat are incompat
7e10: 69 62 6c 65 20 77 69 74 68 20 74 68 65 20 64 65  ible with the de
7e20: 66 61 75 6c 74 20 66 6c 61 67 73 0d 0a 20 20 20  fault flags..   
7e30: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 28 65     //         (e
7e40: 2e 67 2e 20 72 65 61 64 2d 6f 6e 6c 79 29 2e 0d  .g. read-only)..
7e50: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
7e60: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 20 26 26   if (_usePool &&
7e70: 20 21 49 73 41 6c 6c 6f 77 65 64 54 6f 55 73 65   !IsAllowedToUse
7e80: 50 6f 6f 6c 28 6f 70 65 6e 46 6c 61 67 73 29 29  Pool(openFlags))
7e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 75 73 65  ..          _use
7ea0: 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Pool = false;...
7eb0: 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65  .      _fileName
7ec0: 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d   = strFilename;.
7ed0: 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20  .      _flags = 
7ee0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 3b  connectionFlags;
7ef0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73  ....      if (us
7f00: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d  ePool)..      {.
7f10: 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20  .        _sql = 
7f20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7f30: 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46  Pool.Remove(strF
7f40: 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c  ilename, maxPool
7f50: 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56  Size, out _poolV
7f60: 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
7f70: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
7f80: 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
7f90: 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
7fa0: 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
7fb0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
7fc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
7fd0: 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f 6d 50  Type.OpenedFromP
7fe0: 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ool, null, null,
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
8000: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20  ll, null, _sql, 
8010: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77  strFilename, new
8020: 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
8030: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
8040: 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c  SQLite3), strFil
8050: 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20  ename, vfsName, 
8060: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c  connectionFlags,
8070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
8080: 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c  enFlags, maxPool
8090: 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c 20 5f  Size, usePool, _
80a0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b  poolVersion }));
80b0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
80c0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
80d0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
80e0: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
80f0: 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
8100: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
8110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
8120: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
8130: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
8140: 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28 50 6f         "Open (Po
8150: 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c  ol): {0}", Handl
8160: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
8170: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
8180: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  ...      if (_sq
8190: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
81a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
81b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
81c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
81d0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
81e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
81f0: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
8200: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
8210: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
8220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8230: 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49 6e 74   IntPtr db = Int
8240: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
8250: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8260: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
8270: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
8280: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 65  .          int e
8290: 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e  xtFuncs = ((conn
82a0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51  ectionFlags & SQ
82b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
82c0: 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46  ags.NoExtensionF
82d0: 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c  unctions) != SQL
82e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
82f0: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
8300: 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30  nctions) ? 1 : 0
8310: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
8320: 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d 20 30  f (extFuncs != 0
8330: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
8340: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
8350: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8360: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
8370: 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28  _interop(ToUTF8(
8380: 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f  strFilename), To
8390: 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f  UTF8(vfsName), o
83a0: 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46 75 6e  penFlags, extFun
83b0: 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a 20 20  cs, ref db);..  
83c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
83d0: 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69       else..#endi
83e0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  f..          {..
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
8400: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8410: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
8420: 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69  _v2(ToUTF8(strFi
8430: 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64 62 2c  lename), ref db,
8440: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54   openFlags, ToUT
8450: 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20  F8(vfsName));.. 
8460: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
8470: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
8480: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
8490: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
84a0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
84b0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
84c0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
84e0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
84f0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
8500: 20 20 20 20 20 20 20 22 4f 70 65 6e 3a 20 7b 30         "Open: {0
8510: 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69  }", db));..#endi
8520: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  f....          i
8530: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
8540: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
8550: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8560: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
8570: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
8580: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
8590: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c  ectionHandle(db,
85a0: 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20   true);..       
85b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b   }..        lock
85c0: 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43   (_sql) { /* HAC
85d0: 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e  K: Force the Syn
85e0: 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72  cBlock to be "cr
85f0: 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d  eated" now. */ }
8600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8610: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
8620: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
8630: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
8640: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
8650: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
8660: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
8670: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
8680: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
8690: 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e     null, null, n
86a0: 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69  ull, _sql, strFi
86b0: 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65  lename, new obje
86c0: 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ct[] {..        
86d0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
86e0: 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65  e3), strFilename
86f0: 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65  , vfsName, conne
8700: 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20  ctionFlags,..   
8710: 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c 61           openFla
8720: 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  gs, maxPoolSize,
8730: 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20   usePool }));.. 
8740: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8750: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
8760: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
8770: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
8780: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
8790: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
87a0: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
87b0: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
87c0: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
87d0: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
87e0: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66  e old...      if
87f0: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
8800: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
8810: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e  ctionFlags.NoBin
8820: 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  dFunctions) != S
8830: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8840: 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74  lags.NoBindFunct
8850: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ions)..      {..
8860: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66            if (_f
8870: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
8880: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8890: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
88a0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
88b0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
88c0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
88d0: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
88e0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
88f0: 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c 69  eyValuePair<SQLi
8900: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
8910: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
8920: 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20 20 20  ion> pair..     
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
8940: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
8950: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
8960: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
8970: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
8980: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8990: 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70 61 69 72   _functions[pair
89a0: 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e 56 61 6c  .Key] = pair.Val
89b0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue;..          }
89c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
89d0: 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29     SetTimeout(0)
89e0: 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70  ;..      GC.Keep
89f0: 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  Alive(_sql);..  
8a00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8a10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
8a20: 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20  d ClearPool().. 
8a30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
8a40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
8a50: 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65  .ClearPool(_file
8a60: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Name);..    }...
8a70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8a80: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e 74  erride int Count
8a90: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
8aa0: 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72         Dictionar
8ab0: 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63  y<string, int> c
8ac0: 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  ounts = null;.. 
8ad0: 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e 43         int openC
8ae0: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
8af0: 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e     int closeCoun
8b00: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
8b10: 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d  int totalCount =
8b20: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53   0;....        S
8b30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
8b40: 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66  ool.GetCounts(_f
8b50: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
8b60: 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73        ref counts
8b70: 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c  , ref openCount,
8b80: 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c   ref closeCount,
8b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8ba0: 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a  f totalCount);..
8bb0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8bc0: 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20   totalCount;..  
8bd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8be0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
8bf0: 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74  d SetTimeout(int
8c00: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20   nTimeoutMS)..  
8c10: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
8c20: 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20  r db = _sql;..  
8c30: 20 20 20 20 69 66 20 28 64 62 20 3d 3d 20 49 6e      if (db == In
8c40: 74 50 74 72 2e 5a 65 72 6f 29 20 74 68 72 6f 77  tPtr.Zero) throw
8c50: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8c60: 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74  tion("no connect
8c70: 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c  ion handle avail
8c80: 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 53  able");..      S
8c90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8ca0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8cb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8cc0: 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
8cd0: 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20  nTimeoutMS);..  
8ce0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
8cf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8d00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8d10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
8d20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
8d30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8d40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
8d50: 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53  ool Step(SQLiteS
8d60: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
8d70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
8d80: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
8d90: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
8da0: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
8db0: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
8dc0: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
8dd0: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
8de0: 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f        uint timeo
8df0: 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74  ut = (uint)(stmt
8e00: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
8e10: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
8e20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65  );....      Rese
8e30: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d  tCancelCount();.
8e40: 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28  ...      while (
8e50: 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  true)..      {..
8e60: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
8e70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8e80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8e90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
8ea0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
8eb0: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
8ec0: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
8ed0: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
8ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
8ef0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8f00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70  ods.sqlite3_step
8f10: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8f20: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  mt);..        }.
8f30: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
8f40: 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e  houldThrowForCan
8f50: 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20  cel())..        
8f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
8f70: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
8f80: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d  rrorCode.Ok) ||.
8f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fa0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
8fb0: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
8fe0: 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20  rCode.Done))..  
8ff0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
9010: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9020: 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20  .Interrupt;..   
9030: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9040: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9050: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9060: 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  ion(n, null);.. 
9070: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9080: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
9090: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74  iteErrorCode.Int
90a0: 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20 66  errupt) return f
90b0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 69  alse;..        i
90c0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
90d0: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74  rorCode.Row) ret
90e0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
90f0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
9100: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
9110: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
9120: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
9130: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
9140: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
9150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
9160: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b  LiteErrorCode r;
9170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
9180: 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   An error occurr
9190: 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  ed, attempt to r
91a0: 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65  eset the stateme
91b0: 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65  nt.  If the rese
91c0: 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65  t worked because
91d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
91e0: 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  // schema has ch
91f0: 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68  anged, re-try th
9200: 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49  e step again.  I
9210: 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72  f it errored our
9220: 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74   because the dat
9230: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  abase..         
9240: 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74   // is locked, t
9250: 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e  hen keep retryin
9260: 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d  g until the comm
9270: 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75  and timeout occu
9280: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72  rs...          r
9290: 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d   = Reset(stmt);.
92a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
92b0: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
92c0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
92d0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
92e0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
92f0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
9300: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
9310: 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d    else if ((r ==
9320: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9330: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20  .Locked || r == 
9340: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9350: 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63  Busy) && stmt._c
9360: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
9370: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
9380: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
9390: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
93a0: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
93b0: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
93c0: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
93d0: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
93f0: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
9400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9410: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
9420: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
9430: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
9440: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
9450: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
9460: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
9470: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
9480: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
9490: 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20  k > timeout)..  
94a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
94b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
94c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
94d0: 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45  tion(r, GetLastE
94e0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
94f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9500: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9510: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9520: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
9530: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
9540: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
9550: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
9560: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
9570: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
9580: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
9590: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
95a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
95b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
95c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
95d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
95e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
95f0: 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65 20      /// Has the 
9600: 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 29  sqlite3_errstr()
9610: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50   core library AP
9620: 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66  I been checked f
9630: 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f  or yet?..    ///
9640: 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72   If so, is it pr
9650: 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  esent?..    /// 
9660: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9670: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
9680: 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73 74 72  ool? have_errstr
9690: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
96a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
96b0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
96c0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
96d0: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
96e0: 65 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  ed SQLite return
96f0: 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20 20   code using..   
9700: 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33   /// the sqlite3
9710: 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63 74 69  _errstr() functi
9720: 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63 6b  on, falling back
9730: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   to the internal
9740: 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f   lookup..    ///
9750: 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65 73 73   table if necess
9760: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20  ary...    ///.. 
9770: 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20     /// WARNING: 
9780: 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65 20 74 68  Do not remove th
9790: 69 73 20 6d 65 74 68 6f 64 2c 20 69 74 20 69 73  is method, it is
97a0: 20 75 73 65 64 20 76 69 61 20 72 65 66 6c 65 63   used via reflec
97b0: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
97c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
97d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
97e0: 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72  rc">The SQLite r
97f0: 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72  eturn code.</par
9800: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
9810: 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20  turns>The error 
9820: 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20  message or null 
9830: 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  if it cannot be 
9840: 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  found.</returns>
9850: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
9860: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
9870: 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69  ErrorString(SQLi
9880: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d  teErrorCode rc).
9890: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
98a0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
98c0: 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e  have_errstr == n
98d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
98e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
98f0: 20 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e       int version
9900: 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56  Number = SQLiteV
9910: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20  ersionNumber;.. 
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
9930: 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28 76 65  ave_errstr = (ve
9940: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
9950: 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20 20 20  007015);..      
9960: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9970: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
9980: 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d 0a 20  )have_errstr).. 
9990: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
99b0: 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
99c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
99d0: 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63  qlite3_errstr(rc
99e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
99f0: 20 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d        if (ptr !=
9a00: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9a20: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
9a30: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
9a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
9a60: 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67  shal.PtrToString
9a70: 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73  Ansi(ptr);..#els
9a80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9a90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
9aa0: 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20  F8ToString(ptr, 
9ab0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9ae0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9af0: 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50     catch (EntryP
9b00: 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65  ointNotFoundExce
9b10: 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
9b20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
9b30: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
9b40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9b50: 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62      return Fallb
9b60: 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e  ackGetErrorStrin
9b70: 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  g(rc);..    }...
9b80: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9b90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
9ba0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
9bb0: 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65  _readonly() core
9bc0: 20 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65   library API bee
9bd0: 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65  n checked for ye
9be0: 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  t?..    /// If s
9bf0: 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74  o, is it present
9c00: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ?..    /// </sum
9c10: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
9c20: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
9c30: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
9c40: 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ly = null;....  
9c50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9c60: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
9c70: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
9c80: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 74 65   specified state
9c90: 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c  ment is read-onl
9ca0: 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20  y in nature...  
9cb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9cc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9cd0: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
9ce0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68   statement to ch
9cf0: 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
9d00: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
9d10: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
9d20: 20 71 75 65 72 79 20 69 73 20 72 65 61 64 2d 6f   query is read-o
9d30: 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  nly.</returns>..
9d40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9d50: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61  rride bool IsRea
9d60: 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  dOnly(..        
9d70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9d80: 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20 29 0d  stmt..        ).
9d90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9da0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9dc0: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
9dd0: 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
9de0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9e00: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20  versionNumber = 
9e10: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
9e20: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ber;..          
9e30: 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d 74 5f        have_stmt_
9e40: 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73  readonly = (vers
9e50: 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30  ionNumber >= 300
9e60: 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20 20 20  7004);..        
9e70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9e80: 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68       if ((bool)h
9e90: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
9ea0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9eb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9ec0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
9ed0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9ee0: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
9ef0: 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nly(..          
9f00: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
9f10: 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21 3d 20  sqlite_stmt) != 
9f20: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
9f30: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
9f40: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74        catch (Ent
9f50: 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45  ryPointNotFoundE
9f60: 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
9f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9f80: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
9f90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
9fb0: 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e  lse; /* NOTE: Un
9fc0: 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20 66 61  known, assume fa
9fd0: 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a  lse. */..    }..
9fe0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9ff0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
a000: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
a010: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a020: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
a030: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
a040: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
a050: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
a060: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
a070: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a080: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
a090: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
a0a0: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
a0b0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
a0c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a0d0: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
a0e0: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
a0f0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
a100: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
a110: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
a120: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
a130: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
a140: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
a150: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
a160: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
a170: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
a180: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
a190: 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c  string str = nul
a1a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e  l;..        usin
a1b0: 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  g (SQLiteStateme
a1c0: 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65  nt tmp = Prepare
a1d0: 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c  (null, stmt._sql
a1e0: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c  Statement, null,
a1f0: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
a200: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
a210: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 72  meout * 1000), r
a220: 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20  ef str))..      
a230: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
a240: 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65  / Finalize the e
a250: 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  xisting statemen
a260: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d  t..          stm
a270: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44  t._sqlite_stmt.D
a280: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
a290: 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e       // Reassign
a2a0: 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74   a new statement
a2b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
a2c0: 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  old statement an
a2d0: 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70  d clear the temp
a2e0: 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20  orary one..     
a2f0: 20 20 20 20 20 69 66 20 28 74 6d 70 20 21 3d 20       if (tmp != 
a300: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a320: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a330: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
a340: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
a350: 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73     tmp._sqlite_s
a360: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  tmt = null;..   
a370: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a380: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
a390: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
a3a0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
a3b0: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
a3c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a3d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
a3e0: 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e  rrorCode.Unknown
a3f0: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
a400: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
a410: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
a420: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
a430: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
a440: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
a450: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
a460: 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
a470: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20    return n;.... 
a480: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
a490: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a4a0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
a4b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
a4c0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
a4d0: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
a4e0: 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57    return n; // W
a4f0: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
a500: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
a510: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a520: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
a530: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
a540: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
a550: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61      return GetLa
a560: 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a  stError(null);..
a570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
a590: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
a5a0: 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c  or(string defVal
a5b0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
a5c0: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
a5d0: 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47  t = SQLiteBase.G
a5e0: 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  etLastError(_sql
a5f0: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
a600: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
a610: 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
a620: 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66  t)) result = def
a630: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
a640: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
a650: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a6c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75 65 72      #region Quer
a6d0: 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20 53 75  y Diagnostics Su
a6e0: 70 70 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  pport..    /// <
a6f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a700: 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
a710: 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61  used to keep tra
a720: 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ck of whether or
a730: 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f   not the..    //
a740: 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c  / "SQLite_ForceL
a750: 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76 69 72  ogPrepare" envir
a760: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
a770: 68 61 73 20 62 65 65 6e 20 71 75 65 72 69 65 64  has been queried
a780: 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f  .  If so,..    /
a790: 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20  // it will only 
a7a0: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
a7b0: 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  he environment v
a7c0: 61 72 69 61 62 6c 65 20 77 61 73 20 70 72 65 73  ariable was pres
a7d0: 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
a7e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
a7f0: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
a800: 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61  l? forceLogPrepa
a810: 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  re = null;....  
a820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
a890: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a8a0: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61 6c  Determines if al
a8b0: 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61  l calls to prepa
a8c0: 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 20 77  re a SQL query w
a8d0: 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a  ill be logged,..
a8e0: 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65      /// regardle
a8f0: 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ss of the flags 
a900: 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
a910: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  ed connection...
a920: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
a940: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
a950: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61  on-zero to log a
a960: 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70  ll calls to prep
a970: 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 2e  are a SQL query.
a980: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
a990: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
a9a0: 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  al static bool F
a9b0: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29  orceLogPrepare()
a9c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a9d0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
a9e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a9f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72           if (for
aa00: 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d 20  ceLogPrepare == 
aa10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
aa20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aa30: 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65        if (Unsafe
aa40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
aa50: 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d 0a  tSettingValue(..
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 5f          "SQLite_
aa80: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22  ForceLogPrepare"
aa90: 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29  , null) != null)
aaa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aab0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
aac0: 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f           forceLo
aad0: 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65 3b  gPrepare = true;
aae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aaf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ab00: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ab10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72    forceLogPrepar
ab40: 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  e = false;..    
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ab60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ab80: 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f  rn (bool)forceLo
ab90: 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20 20  gPrepare;..     
aba0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
abb0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
abc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
abd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
ac30: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
ac40: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
ac50: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
ac60: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
ac70: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
ac80: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
ac90: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
aca0: 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20 73 74  S, ref string st
acb0: 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d  rRemain)..    {.
acc0: 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69  .      if (!Stri
acd0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
ace0: 28 73 74 72 53 71 6c 29 29 20 73 74 72 53 71 6c  (strSql)) strSql
acf0: 20 3d 20 73 74 72 53 71 6c 2e 54 72 69 6d 28 29   = strSql.Trim()
ad00: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  ;..      if (!St
ad10: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
ad20: 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20  ty(strSql))..   
ad30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
ad40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
ad50: 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  E: SQLite does n
ad60: 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63  ot support the c
ad70: 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61  oncept of separa
ad80: 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20  te schemas..    
ad90: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20      //       in 
ada0: 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68  one database; th
adb0: 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20  erefore, remove 
adc0: 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20  the base schema 
add0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  name..        //
ade0: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73         used to s
adf0: 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f  mooth integratio
ae00: 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20  n with the base 
ae10: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a  .NET Framework..
ae20: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ae30: 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a   data classes...
ae40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ae50: 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53      string baseS
ae60: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e  chemaName = (cnn
ae70: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
ae80: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20  _baseSchemaName 
ae90: 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
aea0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
aeb0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73  sNullOrEmpty(bas
aec0: 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20  eSchemaName)).. 
aed0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aee0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
aef0: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
af10: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
af20: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
af30: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
af40: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
af50: 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61      "[{0}].", ba
af60: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53  seSchemaName), S
af70: 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
af80: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
af90: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
afa0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
afb0: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
afc0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
afd0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
afe0: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
aff0: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e             "{0}.
b000: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
b010: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
b020: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
b030: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b040: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b050: 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20  Flags flags =.. 
b060: 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d           (cnn !=
b070: 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61   null) ? cnn.Fla
b080: 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs : SQLiteConne
b090: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75  ctionFlags.Defau
b0a0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  lt;....      if 
b0b0: 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  (ForceLogPrepare
b0c0: 28 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  () ||..         
b0d0: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
b0e0: 6f 67 50 72 65 70 61 72 65 28 66 6c 61 67 73 29  ogPrepare(flags)
b0f0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
b100: 20 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71        if ((strSq
b110: 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73  l == null) || (s
b120: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20  trSql.Length == 
b130: 30 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72  0) || (strSql.Tr
b140: 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  im().Length == 0
b150: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
b160: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
b170: 65 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e  essage("Preparin
b180: 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e  g {<nothing>}...
b190: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ");..          e
b1a0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
b1b0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
b1c0: 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
b1d0: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
b1e0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
b1f0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
b200: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
b210: 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b  e, "Preparing {{
b220: 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71  {0}}}...", strSq
b230: 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  l));..      }...
b240: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74  .      IntPtr st
b250: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
b260: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
b270: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
b280: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  o;..      int le
b290: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
b2a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
b2b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b2c0: 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20  e.Schema;..     
b2d0: 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30   int retries = 0
b2e0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78  ;..      int max
b2f0: 69 6d 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63  imumRetries = (c
b300: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
b310: 6e 2e 5f 70 72 65 70 61 72 65 52 65 74 72 69 65  n._prepareRetrie
b320: 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s : SQLiteConnec
b330: 74 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70  tion.DefaultPrep
b340: 61 72 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20  areRetries;..   
b350: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
b360: 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20  UTF8(strSql);.. 
b370: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
b380: 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  defs = null;..  
b390: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
b3a0: 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d  ent cmd = null;.
b3b0: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
b3c0: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
b3d0: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
b3e0: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
b3f0: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
b400: 0d 0a 20 20 20 20 20 20 52 65 73 65 74 43 61 6e  ..      ResetCan
b410: 63 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20  celCount();.... 
b420: 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61       GCHandle ha
b430: 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e  ndle = GCHandle.
b440: 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c  Alloc(b, GCHandl
b450: 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a  eType.Pinned);..
b460: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71        IntPtr psq
b470: 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f  l = handle.AddrO
b480: 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b  fPinnedObject();
b490: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
b4a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74  atementHandle st
b4b0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20  atementHandle = 
b4c0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79  null;..      try
b4d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
b4e0: 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20     while ((n == 
b4f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b500: 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53  Schema || n == S
b510: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
b520: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
b530: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
b540: 73 79 29 20 26 26 20 72 65 74 72 69 65 73 20 3c  sy) && retries <
b550: 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73 29   maximumRetries)
b560: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b570: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
b580: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b590: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
b5a0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ng...          }
b5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61  ..          fina
b5c0: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
b5d0: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
b5e0: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
b5f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b600: 20 20 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50       stmt = IntP
b610: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
b620: 20 20 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50        ptr = IntP
b630: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20  tr.Zero;....#if 
b640: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  ..            le
b660: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
b670: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b680: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b690: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
b6a0: 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  rop(_sql, psql, 
b6b0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
b6c0: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c  f stmt, ref ptr,
b6d0: 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   ref len);..#els
b6e0: 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41  e..#if USE_PREPA
b6f0: 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20  RE_V2..         
b700: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
b710: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b720: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73  e3_prepare_v2(_s
b730: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
b740: 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74  th - 1, ref stmt
b750: 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c  , ref ptr);..#el
b760: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
b770: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
b780: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b790: 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73  prepare(_sql, ps
b7a0: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
b7b0: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
b7c0: 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ptr);..#endif.. 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d             len =
b7e0: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   -1;..#endif....
b7f0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
b800: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54 41  _20 && TRACE_STA
b810: 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20  TEMENT..        
b820: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
b830: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
b840: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
b850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b860: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
b870: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50                "P
b890: 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31  repare ({0}): {1
b8a0: 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a  }", n, stmt));..
b8b0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
b8c0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
b8d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b8e0: 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20  Ok) && (stmt != 
b8f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
b900: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b910: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b920: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
b930: 21 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65  != null) stateme
b940: 6e 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65  ntHandle.Dispose
b950: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
b960: 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64     statementHand
b970: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  le = new SQLiteS
b980: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f  tatementHandle(_
b990: 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20  sql, stmt);..   
b9a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b9b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b9c0: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
b9d0: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
b9e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
ba00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
ba10: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
ba20: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
ba30: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
ba40: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
ba50: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
ba60: 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
ba70: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
ba90: 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65  l, null, stateme
baa0: 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c  ntHandle, strSql
bab0: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bad0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
bae0: 20 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72   cnn, strSql, pr
baf0: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
bb00: 53 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  S }));..        
bb10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
bb20: 20 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77   if (ShouldThrow
bb30: 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20  ForCancel())..  
bb40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bb50: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
bb60: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bb70: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
bb90: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bba0: 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20  de.Row) ||..    
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
bbc0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
bbd0: 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20  ode.Done))..    
bbe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
bc00: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
bc10: 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20  de.Interrupt;.. 
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc40: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
bc50: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
bc60: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  l);..          }
bc70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
bc80: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bc90: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
bca0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  )..            b
bcb0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
bcc0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
bcd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
bce0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20  chema)..        
bcf0: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
bd00: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
bd10: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
bd20: 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a  rorCode.Error)..
bd30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bd40: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
bd50: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
bd60: 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61  astError(), "nea
bd70: 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e  r \"TYPES\": syn
bd80: 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69  tax error", Stri
bd90: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
bda0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
bdb0: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
bdc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bdd0: 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74      int pos = st
bde0: 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27  rSql.IndexOf(';'
bdf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
be00: 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29    if (pos == -1)
be10: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65   pos = strSql.Le
be20: 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20  ngth - 1;....   
be30: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64             typed
be40: 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  efs = strSql.Sub
be50: 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20  string(0, pos + 
be60: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
be70: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
be80: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73  ql.Substring(pos
be90: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
bea0: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
beb0: 6e 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  n = String.Empty
bec0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
bed0: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
bee0: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
bef0: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
bf00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
bf20: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
bf30: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
bf40: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65  s, timeoutMS, re
bf50: 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  f strRemain);.. 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
bf70: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
bf80: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
bf90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
bfa0: 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20       if (cmd != 
bfb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
bfc0: 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79         cmd.SetTy
bfd0: 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a  pes(typedefs);..
bfe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bff0: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
c000: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
c010: 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34  (NET_35 || NET_4
c020: 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e  0 || NET_45 || N
c030: 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35  ET_451 || NET_45
c040: 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e  2 || NET_46 || N
c050: 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36  ET_461 || NET_46
c060: 32 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e  2 || NET_47 || N
c070: 45 54 5f 34 37 31 20 7c 7c 20 4e 45 54 5f 34 37  ET_471 || NET_47
c080: 32 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f  2) && !PLATFORM_
c090: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
c0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
c0b0: 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67  se if (_building
c0c0: 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20  Schema == false 
c0d0: 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  && String.Compar
c0e0: 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  e(GetLastError()
c0f0: 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61  , 0, "no such ta
c100: 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41  ble: TEMP.SCHEMA
c110: 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67  ", 0, 26, String
c120: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
c130: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
c140: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
c150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c160: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 53 74    strRemain = St
c170: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
c180: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
c190: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
c1a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
c1b0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
c1c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c1d0: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
c1e0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
c1f0: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
c200: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
c210: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
c220: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
c230: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
c240: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
c250: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
c260: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
c270: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c280: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
c2b0: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
c2d0: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
c2e0: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
c2f0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
c300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c310: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
c320: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
c330: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
c340: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
c350: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
c360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c370: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
c380: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
c390: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c3a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c3b0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
c3c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c3d0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
c400: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
c410: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
c420: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c430: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
c440: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
c450: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
c460: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c470: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
c480: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
c490: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
c4a0: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
c4b0: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
c4c0: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
c4d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c4e0: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
c4f0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
c500: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
c510: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
c520: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
c530: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
c540: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
c550: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
c560: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
c570: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
c580: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
c590: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
c5a0: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
c5b0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
c5c0: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
c5d0: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
c5e0: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
c5f0: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
c600: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c610: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c620: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
c630: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
c640: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
c650: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c660: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
c670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c680: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
c690: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
c6a0: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
c6b0: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
c6c0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
c6d0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
c6e0: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
c6f0: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
c700: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c710: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
c720: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c730: 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54 68      if (ShouldTh
c740: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d  rowForCancel()).
c750: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c760: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
c770: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c780: 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20  e.Ok) ||..      
c790: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
c7a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c7b0: 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  Row) ||..       
c7c0: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
c7d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
c7e0: 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  one))..         
c7f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c800: 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65        n = SQLite
c810: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
c820: 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  upt;..          
c830: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c840: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
c850: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c860: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
c870: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
c880: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c890: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29  rCode.Interrupt)
c8a0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
c8b0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
c8c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c8d0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
c8e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
c8f0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
c900: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ;....        str
c910: 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53  Remain = UTF8ToS
c920: 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b  tring(ptr, len);
c930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
c940: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
c950: 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e  != null) cmd = n
c960: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
c970: 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20  nt(this, flags, 
c980: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  statementHandle,
c990: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
c9a0: 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67  g(0, strSql.Leng
c9b0: 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c  th - strRemain.L
c9c0: 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73  ength), previous
c9d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
c9e0: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
c9f0: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
ca00: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
ca10: 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28      handle.Free(
ca20: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
ca30: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
ca40: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
ca50: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
ca60: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
ca70: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29  ndle, int index)
ca80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ca90: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
caa0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
cab0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cac0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
cad0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
cae0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
caf0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
cb00: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
cb10: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
cb20: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
cb30: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
cb40: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
cb50: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
cb60: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
cb70: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
cb80: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
cb90: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
cba0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
cbb0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
cbc0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
cbd0: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
cbe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
cbf0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
cc00: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
cc10: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
cc20: 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65  LogMessage(Helpe
cc30: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
cc40: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
cc50: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
cc60: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
cc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
cc80: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
cc90: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
cca0: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
ccb0: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
ccc0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
ccd0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
cce0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65   index, value.Ge
ccf0: 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29  tType(), value))
cd00: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cd10: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
cd20: 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65  tring FormatDate
cd30: 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61  Time(DateTime va
cd40: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
cd50: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
cd60: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
cd70: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
cd80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  ....        resu
cd90: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
cda0: 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d  ToString("yyyy-M
cdb0: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
cdc0: 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20  FFFFFK"));..    
cdd0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
cde0: 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20  d(' ');..       
cdf0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
ce00: 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20  alue.Kind);..   
ce10: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
ce20: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
ce30: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
ce40: 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d  value.Ticks);...
ce50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
ce60: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
ce70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ce80: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
ce90: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
cea0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
ceb0: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
cec0: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
ced0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
cee0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
cef0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
cf00: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
cf10: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
cf20: 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68  ssage(HelperMeth
cf30: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
cf40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
cf50: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
cf60: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
cf70: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
cf80: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
cf90: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
cfa0: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
cfb0: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
cfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
cfd0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
cfe0: 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54 69  x, typeof(DateTi
cff0: 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65 54  me), FormatDateT
d000: 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20  ime(value)));.. 
d010: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
d020: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
d030: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
d040: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d050: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
d060: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
d070: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d080: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
d090: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
d0a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d0b0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
d0c0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
d0d0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
d0e0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
d0f0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
d100: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
d110: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
d120: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
d130: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
d140: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
d150: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
d160: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
d170: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
d180: 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c  of(String), (val
d190: 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61  ue != null) ? va
d1a0: 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  lue : "<null>"))
d1b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d1c0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
d1d0: 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69  tring ToHexadeci
d1e0: 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  malString(..    
d1f0: 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79      byte[] array
d200: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
d210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
d220: 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  array == null)..
d230: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d240: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
d250: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
d260: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
d270: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72  tringBuilder(arr
d280: 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d  ay.Length * 2);.
d290: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  ...        int l
d2a0: 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65  ength = array.Le
d2b0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
d2c0: 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
d2d0: 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e  = 0; index < len
d2e0: 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
d2f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
d300: 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69  t.Append(array[i
d310: 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22  ndex].ToString("
d320: 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  x2"));....      
d330: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
d340: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
d350: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
d360: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
d370: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
d380: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d390: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
d3a0: 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
d3b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
d3c0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
d3d0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
d3e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
d3f0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c  g.LogMessage(Hel
d400: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
d410: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
d420: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
d430: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
d440: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
d450: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
d460: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
d470: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
d480: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
d490: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
d4a0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
d4b0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
d4c0: 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65  (Byte[]), (value
d4d0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65   != null) ? ToHe
d4e0: 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28  xadecimalString(
d4f0: 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e  value) : "<null>
d500: 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  "));..    }.... 
d510: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d520: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
d530: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
d540: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
d550: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d560: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
d570: 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  ex, double value
d580: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d590: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
d5a0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
d5b0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
d5c0: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
d5d0: 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  f (ForceLogPrepa
d5e0: 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65  re() || HelperMe
d5f0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
d600: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
d610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
d620: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
d630: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
d640: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
d650: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
d660: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
d670: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d680: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d690: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d6a0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68  e3_bind_double(h
d6b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d6c0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
d6d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
d6e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
d6f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d700: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d710: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66  Error());..#elif
d720: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d730: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
d740: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
d750: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d760: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
d770: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
d780: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
d790: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
d7a0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d7b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d7c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d7d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d7e0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
d7f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
d800: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
d810: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
d820: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d830: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d840: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
d850: 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74  Bind_Int32(SQLit
d860: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d870: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d880: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
d890: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c  t index, int val
d8a0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
d8b0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
d8c0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
d8d0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
d8e0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
d8f0: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
d900: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
d910: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
d920: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
d930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d940: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
d950: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d960: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d970: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d980: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d990: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d9a0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61  ite3_bind_int(ha
d9b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
d9c0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
d9d0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d9e0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d9f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
da00: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
da10: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
da20: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
da30: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
da40: 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65  nd_UInt32(SQLite
da50: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
da60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
da70: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
da80: 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c   index, uint val
da90: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
daa0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
dab0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
dac0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
dad0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
dae0: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
daf0: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
db00: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
db10: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
db20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
db30: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
db40: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
db50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
db60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
db70: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
db80: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
db90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dba0: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
dbb0: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
dbc0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
dbd0: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
dbe0: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
dbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
dc00: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
dc10: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
dc20: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
dc30: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
dc40: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
dc50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dc60: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
dc70: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
dc80: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
dc90: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
dca0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
dcb0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
dcc0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
dcd0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
dce0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
dcf0: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
dd10: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
dd20: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
dd30: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
dd40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
dd50: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
dd60: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
dd70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dd80: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
dd90: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
dda0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
ddb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
ddc0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ddd0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
dde0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ddf0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
de00: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
de10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
de20: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
de30: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
de40: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
de50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
de60: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
de70: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
de80: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
de90: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
dea0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
deb0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
dec0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
ded0: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
dee0: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
def0: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
df00: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
df10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
df20: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
df30: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
df40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
df50: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
df60: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
df70: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
df80: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
df90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
dfa0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
dfb0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
dfc0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
dfd0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
dfe0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
dff0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e000: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e010: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69  tError());..#eli
e020: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e030: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
e040: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
e050: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e060: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
e070: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
e080: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
e090: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
e0a0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
e0b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
e0c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
e0d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
e0e0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
e0f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
e100: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
e110: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
e120: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
e130: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
e140: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e150: 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69  Bind_UInt64(SQLi
e160: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
e170: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
e180: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
e190: 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20  nt index, ulong 
e1a0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
e1b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
e1c0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
e1d0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
e1e0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
e1f0: 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67      if (ForceLog
e200: 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c  Prepare() || Hel
e210: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
e220: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
e230: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e240: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
e250: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
e260: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
e270: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e280: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e290: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e2a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e2b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e2c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
e2d0: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
e2e0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
e2f0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e300: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e310: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e320: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e330: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e340: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
e350: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
e360: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e370: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e380: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e390: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
e3a0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
e3b0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
e3c0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e3d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e3e0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e3f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e400: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e410: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e420: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
e430: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
e440: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
e450: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e460: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e470: 76 6f 69 64 20 42 69 6e 64 5f 42 6f 6f 6c 65 61  void Bind_Boolea
e480: 6e 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  n(SQLiteStatemen
e490: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
e4a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
e4b0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
e4c0: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
e4d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
e4e0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
e4f0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
e500: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
e510: 0a 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72  .        if (For
e520: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
e530: 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  | HelperMethods.
e540: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
e550: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e560: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e570: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
e580: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
e590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  }....        int
e5a0: 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 20   value2 = value 
e5b0: 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20  ? 1 : 0;....    
e5c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e5d0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e5e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e5f0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
e600: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
e610: 65 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  e2);..        if
e620: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
e630: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
e640: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e650: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
e660: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
e670: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e680: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
e690: 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74  nd_Text(SQLiteSt
e6a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
e6b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e6c0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
e6d0: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
e6e0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
e6f0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
e700: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
e710: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
e720: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
e730: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
e740: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
e750: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
e760: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
e770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e780: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
e790: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e7b0: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
e7c0: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a  ToUTF8(value);..
e7d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 46 6f  ..        if (Fo
e7e0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20  rceLogPrepare() 
e7f0: 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  || HelperMethods
e800: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
e810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e820: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
e830: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e840: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  b);..        }..
e850: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e860: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e870: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e880: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
e890: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
e8a0: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
e8b0: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
e8c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
e8d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
e8e0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
e8f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e900: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e910: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e920: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e930: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
e940: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
e950: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e970: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
e980: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
e990: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
e9a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e9b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e9c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e9d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e9e0: 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72    if (ForceLogPr
e9f0: 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65  epare() || Helpe
ea00: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
ea10: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
ea20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ea30: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
ea40: 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20   index, dt);..  
ea50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ea60: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
ea70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ea80: 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69  Flags.BindDateTi
ea90: 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53  meWithKind) == S
eaa0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
eab0: 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d  lags.BindDateTim
eac0: 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20  eWithKind)..    
ead0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eae0: 20 20 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d     if ((_datetim
eaf0: 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d  eKind != DateTim
eb00: 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65  eKind.Unspecifie
eb10: 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  d) &&..         
eb20: 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20         (dt.Kind 
eb30: 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  != DateTimeKind.
eb40: 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d  Unspecified) &&.
eb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eb60: 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61   (dt.Kind != _da
eb70: 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20  tetimeKind))..  
eb80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
eba0: 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d  (_datetimeKind =
ebb0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
ebc0: 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc)..           
ebd0: 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74           dt = dt
ebe0: 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65  .ToUniversalTime
ebf0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
ec00: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
ec10: 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44  atetimeKind == D
ec20: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61  ateTimeKind.Loca
ec30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ec40: 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e          dt = dt.
ec50: 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a  ToLocalTime();..
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ec70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ec80: 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74      switch (_dat
ec90: 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20  etimeFormat)..  
eca0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ecb0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
ecc0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
ecd0: 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
ece0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ecf0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
ed00: 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73  value = dt.Ticks
ed10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ed20: 20 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72           if (For
ed30: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
ed40: 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  | HelperMethods.
ed50: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
ed60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
eda0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
edd0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
ede0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ee00: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ee10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ee20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ee30: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
ee40: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
ee70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ee80: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
ee90: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
eea0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eec0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
eed0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
eee0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
eef0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
ef00: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
ef10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ef20: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
ef30: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
ef40: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
ef50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ef60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
ef70: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ef80: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ef90: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
efa0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
efb0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
efc0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
efd0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
eff0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
f000: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
f010: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f030: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
f040: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
f050: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20  s.JulianDay:..  
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
f070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f080: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
f090: 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28  e = ToJulianDay(
f0a0: 64 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dt);....        
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f0c0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
f0d0: 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f  ) || HelperMetho
f0e0: 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73  ds.LogBind(flags
f0f0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
f100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f120: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
f130: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
f140: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
f160: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
f170: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f190: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f1a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
f1b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f1c0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
f1d0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
f1e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f1f0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f200: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f210: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f220: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f230: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f240: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f250: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
f260: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
f270: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
f280: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
f290: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
f2a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f2b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f2c0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
f2d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
f2e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f300: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
f310: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
f320: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
f330: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
f340: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20  break;..#else.. 
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
f390: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
f3a0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f3d0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
f3e0: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
f3f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
f400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f410: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
f420: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
f430: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
f440: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
f450: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
f460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f470: 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67      if (ForceLog
f480: 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c  Prepare() || Hel
f490: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
f4a0: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f4d0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
f4e0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
f4f0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f510: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
f520: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
f530: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
f540: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f550: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f560: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f570: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
f580: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
f590: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f5b0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
f5c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
f5d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
f5e0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
f5f0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
f600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f610: 72 65 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51  reak;..#elif !SQ
f620: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
f650: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
f660: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f670: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
f680: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
f690: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f6b0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
f6c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f6d0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f6e0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f6f0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f710: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
f720: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
f730: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
f740: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
f750: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
f760: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
f770: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f780: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f7b0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
f7c0: 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d  = ToUTF8(dt);...
f7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7e0: 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f       if (ForceLo
f7f0: 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65  gPrepare() || He
f800: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
f810: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f840: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
f850: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
f860: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
f870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f890: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f8a0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f8b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f8c0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
f8d0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
f8e0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
f8f0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
f920: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
f930: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
f940: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
f950: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f970: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
f980: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
f990: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
f9a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f9b0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
f9c0: 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61  d_Blob(SQLiteSta
f9d0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
f9e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f9f0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
fa00: 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62  dex, byte[] blob
fa10: 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Data)..    {..  
fa20: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
fa30: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
fa40: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
fa50: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
fa60: 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50     if (ForceLogP
fa70: 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70  repare() || Help
fa80: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
fa90: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
faa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
fab0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
fac0: 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74  , index, blobDat
fad0: 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  a);..        }..
fae0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
faf0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
fb00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fb10: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  s.sqlite3_bind_b
fb20: 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  lob(handle, inde
fb30: 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f  x, blobData, blo
fb40: 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49  bData.Length, (I
fb50: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
fb60: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
fb70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
fb80: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
fb90: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
fba0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
fbb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
fbc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fbd0: 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28   void Bind_Null(
fbe0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
fbf0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
fc00: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
fc10: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
fc20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
fc30: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
fc40: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
fc50: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
fc60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 46  ...        if (F
fc70: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29  orceLogPrepare()
fc80: 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64   || HelperMethod
fc90: 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
fca0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
fcb0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
fcc0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
fcd0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
fce0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
fcf0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
fd00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fd10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
fd20: 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  l(handle, index)
fd30: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
fd40: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
fd50: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
fd60: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
fd70: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
fd80: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
fd90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fda0: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
fdb0: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
fdc0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
fdd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fde0: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
fdf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
fe00: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
fe10: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
fe20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
fe30: 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75          int valu
fe40: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
fe50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fe60: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
fe70: 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d  ount(handle);...
fe80: 0a 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72  .        if (For
fe90: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
fea0: 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  | HelperMethods.
feb0: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
fec0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
fed0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
fee0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
fef0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
ff00: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
ff10: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
ff20: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
ff30: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ff40: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
ff50: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
ff60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ff70: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
ff80: 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e  0} paramter coun
ff90: 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  t is {1}.",..   
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
ffb0: 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65  dleIntPtr, value
ffc0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
ffd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ffe0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
fff0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10000 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42  verride string B
10010 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51  ind_ParamName(SQ
10020 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10030 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
10040 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
10050 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
10060 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
10070 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
10080 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
10090 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
100a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
100b0 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  me;....#if !SQLI
100c0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
100d0 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
100e0 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  ;..        name 
100f0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
10100 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10110 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
10120 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69  parameter_name_i
10130 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
10140 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
10150 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
10160 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
10170 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
10180 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10190 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
101a0 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65  eter_name(handle
101b0 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
101c0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
101d0 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72    if (ForceLogPr
101e0 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65  epare() || Helpe
101f0 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
10200 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
10210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10220 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
10230 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
10240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
10250 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
10260 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
10270 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
102a0 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
102c0 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
102d0 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69  mter #{1} name i
102e0 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20  s {{{2}}}.",..  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
10300 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
10310 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  x, name));..    
10320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10330 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20   return name;.. 
10340 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10350 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
10360 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65  t Bind_ParamInde
10370 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
10380 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
10390 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
103a0 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61  ags, string para
103b0 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  mName)..    {.. 
103c0 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
103d0 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
103e0 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
103f0 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
10400 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e    int index = Un
10410 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10420 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
10430 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68  arameter_index(h
10440 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61  andle, ToUTF8(pa
10450 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20  ramName));....  
10460 20 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c        if (ForceL
10470 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48  ogPrepare() || H
10480 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
10490 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
104a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
104b0 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
104c0 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
104d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
104e0 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
104f0 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
10500 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
10510 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
10520 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
10530 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
10540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10550 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20   "Statement {0} 
10560 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20 6f  paramter index o
10570 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69  f name {{{1}}} i
10580 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20  s #{2}.",..     
10590 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
105a0 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e 61  eIntPtr, paramNa
105b0 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  me, index));..  
105c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
105d0 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b     return index;
105e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
105f0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10600 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   int ColumnCount
10610 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10620 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
10630 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
10640 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10650 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
10660 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ount(stmt._sqlit
10670 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d  e_stmt);..    }.
10680 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10690 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
106a0 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74  ColumnName(SQLit
106b0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
106c0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
106d0 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
106e0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
106f0 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
10700 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
10710 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10720 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10730 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
10740 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10750 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
10760 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10770 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
10780 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10790 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
107a0 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
107b0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
107c0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
107d0 20 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65   (p == IntPtr.Ze
107e0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  ro)..        thr
107f0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
10800 65 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72  eption(SQLiteErr
10810 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65  orCode.NoMem, Ge
10820 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
10830 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
10840 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75  DARD..      retu
10850 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10860 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  p, len);..#else.
10870 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
10880 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31  F8ToString(p, -1
10890 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
108a0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
108b0 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
108c0 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
108d0 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
108e0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
108f0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
10900 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
10910 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10920 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10930 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
10940 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
10950 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10960 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10970 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
10980 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
10990 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
109a0 78 2c 20 72 65 66 20 54 79 70 65 41 66 66 69 6e  x, ref TypeAffin
109b0 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
109c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
109d0 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51  nt len;..#if !SQ
109e0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
109f0 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d         len = 0;.
10a00 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10a10 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
10a20 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10a30 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
10a40 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
10a50 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
10a60 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , ref len);..#el
10a70 73 65 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  se..        len 
10a80 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 49  = -1;..        I
10a90 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
10aa0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10ab0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
10ac0 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69  ltype(stmt._sqli
10ad0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
10ae0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
10af0 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f    nAffinity = Co
10b00 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
10b10 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
10b20 20 20 20 20 20 20 69 66 20 28 28 70 20 21 3d 20        if ((p != 
10b30 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20  IntPtr.Zero) && 
10b40 28 28 6c 65 6e 20 3e 20 30 29 20 7c 7c 20 28 6c  ((len > 0) || (l
10b50 65 6e 20 3d 3d 20 2d 31 29 29 29 0d 0a 20 20 20  en == -1)))..   
10b60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10b70 20 20 20 20 73 74 72 69 6e 67 20 64 65 63 6c 54      string declT
10b80 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ype = UTF8ToStri
10b90 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  ng(p, len);.... 
10ba0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10bb0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
10bc0 6d 70 74 79 28 64 65 63 6c 54 79 70 65 29 29 0d  mpty(declType)).
10bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10be0 20 72 65 74 75 72 6e 20 64 65 63 6c 54 79 70 65   return declType
10bf0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
10c00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
10c10 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44   ar = stmt.TypeD
10c20 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d 0a 20  efinitions;.... 
10c30 20 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d         if (ar !=
10c40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10c50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
10c60 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65  f (index < ar.Le
10c70 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78  ngth && ar[index
10c80 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ] != null)..    
10c90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10ca0 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20  rn ar[index];.. 
10cb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10cc0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
10cd0 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 7d 0d  g.Empty;..    }.
10ce0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10cf0 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
10d00 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53  umnIndex(SQLiteS
10d10 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
10d20 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
10d30 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10d40 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f  int x = ColumnCo
10d50 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
10d60 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
10d70 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d   0; n < x; n++).
10d80 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
10d90 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
10da0 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c  pare(columnName,
10db0 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74   ColumnName(stmt
10dc0 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , n), StringComp
10dd0 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
10de0 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
10df0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
10e00 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n n;..      }.. 
10e10 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
10e20 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10e30 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10e40 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69  string ColumnOri
10e50 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65  ginalName(SQLite
10e60 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
10e70 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
10e80 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
10e90 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
10ea0 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
10eb0 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10ec0 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
10ed0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10ee0 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
10ef0 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
10f00 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10f10 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
10f20 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
10f30 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
10f40 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
10f50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10f60 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
10f70 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  gin_name(stmt._s
10f80 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10f90 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
10fa0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10fb0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10fc0 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61   string ColumnDa
10fd0 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74  tabaseName(SQLit
10fe0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10ff0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11000 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
11010 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
11020 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
11030 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
11040 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
11050 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11060 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
11070 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ase_name_interop
11080 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11090 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
110a0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
110b0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
110c0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
110d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
110e0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
110f0 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74  database_name(st
11100 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
11110 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
11120 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
11130 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11140 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
11150 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c  umnTableName(SQL
11160 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
11170 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
11180 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
11190 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
111a0 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
111b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
111c0 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
111d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
111e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
111f0 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  le_name_interop(
11200 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
11210 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
11220 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
11230 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
11240 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
11250 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11260 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11270 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  able_name(stmt._
11280 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11290 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
112a0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
112b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
112c0 65 20 62 6f 6f 6c 20 44 6f 65 73 54 61 62 6c 65  e bool DoesTable
112d0 45 78 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  Exist(..        
112e0 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
112f0 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
11300 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
11310 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11320 20 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70    string dataTyp
11330 65 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54  e = null; /* NOT
11340 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20   USED */..      
11350 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65    string collate
11360 53 65 71 75 65 6e 63 65 20 3d 20 6e 75 6c 6c 3b  Sequence = null;
11370 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d   /* NOT USED */.
11380 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f  .        bool no
11390 74 4e 75 6c 6c 20 3d 20 66 61 6c 73 65 3b 20 2f  tNull = false; /
113a0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
113b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 72 69 6d         bool prim
113c0 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65 3b 20  aryKey = false; 
113d0 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a  /* NOT USED */..
113e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 75 74          bool aut
113f0 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c  oIncrement = fal
11400 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  se; /* NOT USED 
11410 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  */....        re
11420 74 75 72 6e 20 43 6f 6c 75 6d 6e 4d 65 74 61 44  turn ColumnMetaD
11430 61 74 61 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ata(..          
11440 20 20 64 61 74 61 42 61 73 65 2c 20 74 61 62 6c    dataBase, tabl
11450 65 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 2c 20  e, null, false, 
11460 72 65 66 20 64 61 74 61 54 79 70 65 2c 0d 0a 20  ref dataType,.. 
11470 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63             ref c
11480 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20  ollateSequence, 
11490 72 65 66 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66  ref notNull, ref
114a0 20 70 72 69 6d 61 72 79 4b 65 79 2c 0d 0a 20 20   primaryKey,..  
114b0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 61 75            ref au
114c0 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 20  toIncrement);.. 
114d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
114e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
114f0 6f 6c 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  ol ColumnMetaDat
11500 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73  a(string dataBas
11510 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c  e, string table,
11520 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
11530 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 2c 20 72  bool canThrow, r
11540 65 66 20 73 74 72 69 6e 67 20 64 61 74 61 54 79  ef string dataTy
11550 70 65 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63  pe, ref string c
11560 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20  ollateSequence, 
11570 72 65 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c  ref bool notNull
11580 2c 20 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61  , ref bool prima
11590 72 79 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20  ryKey, ref bool 
115a0 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a  autoIncrement)..
115b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
115c0 50 74 72 20 64 61 74 61 54 79 70 65 50 74 72 20  Ptr dataTypePtr 
115d0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
115e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
115f0 6c 53 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72  lSeqPtr = IntPtr
11600 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
11610 74 20 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d  t nnotNull = 0;.
11620 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d  .      int nprim
11630 61 72 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20  aryKey = 0;..   
11640 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20     int nautoInc 
11650 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
11660 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
11670 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b        int dtLen;
11680 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65  ..      int csLe
11690 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
116a0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
116b0 20 20 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    dtLen = 0;..  
116c0 20 20 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a      csLen = 0;..
116d0 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
116e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
116f0 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
11700 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
11710 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
11720 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
11730 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
11740 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64  8(column), ref d
11750 61 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20  ataTypePtr, ref 
11760 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20  collSeqPtr, ref 
11770 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70  nnotNull, ref np
11780 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e  rimaryKey, ref n
11790 61 75 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c  autoInc, ref dtL
117a0 65 6e 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d  en, ref csLen);.
117b0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74  .#else..      dt
117c0 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  Len = -1;..     
117d0 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a   csLen = -1;....
117e0 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
117f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11800 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
11810 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c  mn_metadata(_sql
11820 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
11830 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
11840 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
11850 29 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50  ), ref dataTypeP
11860 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50  tr, ref collSeqP
11870 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c  tr, ref nnotNull
11880 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65  , ref nprimaryKe
11890 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29  y, ref nautoInc)
118a0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
118b0 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26   if (canThrow &&
118c0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
118d0 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f  orCode.Ok)) thro
118e0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
118f0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
11900 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
11910 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
11920 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
11930 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
11940 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
11950 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
11960 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
11970 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
11980 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
11990 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
119a0 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
119b0 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
119c0 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
119d0 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
119e0 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 0d  utoInc == 1);...
119f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6e  .      return (n
11a00 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
11a10 6f 64 65 2e 4f 6b 29 3b 0d 0a 20 20 20 20 7d 0d  ode.Ok);..    }.
11a20 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11a30 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
11a40 47 65 74 4f 62 6a 65 63 74 28 53 51 4c 69 74 65  GetObject(SQLite
11a50 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11a60 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
11a70 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  {..        switc
11a80 68 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  h (ColumnAffinit
11a90 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 0d  y(stmt, index)).
11aa0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11ab0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
11ac0 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
11ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11af0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11b00 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
11b10 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
11b20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11b30 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
11b40 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
11b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11b60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11b70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11b80 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
11b90 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
11ba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11bb0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
11bc0 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d  eAffinity.Text:.
11bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11bf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
11c00 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
11c10 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11c20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11c30 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
11c40 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c70 20 20 20 20 20 6c 6f 6e 67 20 73 69 7a 65 20 3d       long size =
11c80 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20   GetBytes(stmt, 
11c90 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20  index, 0, null, 
11ca0 30 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  0, 0);....      
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11cc0 20 28 28 73 69 7a 65 20 3e 20 30 29 20 26 26 20   ((size > 0) && 
11cd0 28 73 69 7a 65 20 3c 3d 20 69 6e 74 2e 4d 61 78  (size <= int.Max
11ce0 56 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  Value))..       
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
11d20 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b  ytes = new byte[
11d30 28 69 6e 74 29 73 69 7a 65 5d 3b 0d 0a 0d 0a 20  (int)size];.... 
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28         GetBytes(
11d60 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
11d70 62 79 74 65 73 2c 20 30 2c 20 28 69 6e 74 29 73  bytes, 0, (int)s
11d80 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ize);....       
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11dd0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
11de0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11df0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11e00 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
11e10 69 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20  ity.Null:..     
11e20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e    return DBNull.
11e50 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
11e60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11e80 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
11e90 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
11ea0 6e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n();..    }.... 
11eb0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11ec0 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44  ride double GetD
11ed0 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
11ee0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11ef0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
11f00 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
11f10 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
11f20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
11f30 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11f40 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
11f50 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69  ouble(stmt._sqli
11f60 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
11f70 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
11f80 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
11f90 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30  double value = 0
11fa0 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  .0;..      Unsaf
11fb0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11fc0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
11fd0 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
11fe0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11ff0 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
12000 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
12010 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a   value;..#else..
12020 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12030 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
12040 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
12050 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
12060 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12070 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65  de bool GetBoole
12080 61 6e 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  an(SQLiteStateme
12090 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
120a0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
120b0 20 20 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65    return ToBoole
120c0 61 6e 28 47 65 74 4f 62 6a 65 63 74 28 73 74 6d  an(GetObject(stm
120d0 74 2c 20 69 6e 64 65 78 29 2c 20 43 75 6c 74 75  t, index), Cultu
120e0 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
120f0 43 75 6c 74 75 72 65 2c 20 66 61 6c 73 65 29 3b  Culture, false);
12100 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12110 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12120 20 73 62 79 74 65 20 47 65 74 53 42 79 74 65 28   sbyte GetSByte(
12130 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
12140 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
12150 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
12160 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
12170 28 73 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  (sbyte)(GetInt32
12180 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
12190 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
121a0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
121b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
121c0 20 62 79 74 65 20 47 65 74 42 79 74 65 28 53 51   byte GetByte(SQ
121d0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
121e0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
121f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
12200 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62  urn unchecked((b
12210 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73 74  yte)(GetInt32(st
12220 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74  mt, index) & byt
12230 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  e.MaxValue));.. 
12240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
12250 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68  rnal override sh
12260 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c  ort GetInt16(SQL
12270 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12280 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
12290 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
122a0 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68  rn unchecked((sh
122b0 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74  ort)(GetInt32(st
122c0 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68  mt, index) & ush
122d0 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  ort.MaxValue));.
122e0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
122f0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12300 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36  ushort GetUInt16
12310 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12320 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12330 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12340 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
12350 28 28 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74  ((ushort)(GetInt
12360 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
12370 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
12380 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
12390 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
123a0 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33  ride int GetInt3
123b0 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
123c0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
123d0 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
123e0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
123f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12400 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73  te3_column_int(s
12410 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
12420 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
12430 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12440 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74 20 47   override uint G
12450 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  etUInt32(SQLiteS
12460 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
12470 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
12480 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
12490 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47  nchecked((uint)G
124a0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
124b0 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
124c0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
124d0 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49  erride long GetI
124e0 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
124f0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
12500 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
12510 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
12520 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
12530 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
12540 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12550 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
12560 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  t64(stmt._sqlite
12570 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
12580 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
12590 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f  ANDARD..      lo
125a0 6e 67 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20  ng value = 0;.. 
125b0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
125c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
125d0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e  _column_int64_in
125e0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
125f0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
12600 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ref value);..   
12610 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
12620 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
12630 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
12640 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
12650 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
12660 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12670 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e  al override ulon
12680 67 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69  g GetUInt64(SQLi
12690 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
126a0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
126b0 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
126c0 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f  n unchecked((ulo
126d0 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74  ng)GetInt64(stmt
126e0 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
126f0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12700 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
12710 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
12720 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
12730 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
12740 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
12750 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
12760 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
12770 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
12780 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
12790 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
127a0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
127b0 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
127c0 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
127d0 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
127e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
127f0 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
12800 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
12810 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12820 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e  olumn_text(stmt.
12830 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12840 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  dex),..        U
12850 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12860 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
12870 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
12880 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
12890 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
128a0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
128b0 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65  al override Date
128c0 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65  Time GetDateTime
128d0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
128e0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
128f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12900 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
12910 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
12920 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d  eFormats.Ticks).
12930 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
12940 54 69 63 6b 73 54 6f 44 61 74 65 54 69 6d 65 28  TicksToDateTime(
12950 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
12960 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
12970 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
12980 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
12990 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
129a0 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
129b0 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20  anDay)..        
129c0 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
129d0 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
129e0 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
129f0 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  imeKind);..     
12a00 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74   else if (_datet
12a10 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
12a20 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
12a30 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20  nixEpoch)..     
12a40 20 20 20 72 65 74 75 72 6e 20 55 6e 69 78 45 70     return UnixEp
12a50 6f 63 68 54 6f 44 61 74 65 54 69 6d 65 28 47 65  ochToDateTime(Ge
12a60 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
12a70 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
12a80 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  nd);....#if !SQL
12a90 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
12aa0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
12ab0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
12ac0 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
12ad0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12ae0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
12af0 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
12b00 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
12b10 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
12b20 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
12b30 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
12b40 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
12b50 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12b60 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
12b70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12b80 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20  ndex),..        
12b90 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12ba0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
12bb0 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73  mn_bytes(stmt._s
12bc0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
12bd0 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  x));..#endif..  
12be0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12bf0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
12c00 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74  g GetBytes(SQLit
12c10 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
12c20 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
12c30 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
12c40 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
12c50 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
12c60 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
12c70 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
12c80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12c90 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
12ca0 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
12cb0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
12cc0 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
12cd0 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
12ce0 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
12cf0 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
12d00 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
12d10 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
12d20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
12d30 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
12d40 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
12d50 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
12d60 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
12d70 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
12d80 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
12d90 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
12da0 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
12db0 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
12dc0 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
12dd0 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
12de0 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
12df0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
12e00 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
12e10 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
12e20 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12e30 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d  _column_blob(stm
12e40 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
12e50 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
12e60 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
12e70 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
12e80 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
12e90 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
12ea0 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
12eb0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
12ec0 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
12ed0 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
12ee0 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
12ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
12f00 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
12f10 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12f20 72 72 69 64 65 20 63 68 61 72 20 47 65 74 43 68  rride char GetCh
12f30 61 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ar(SQLiteStateme
12f40 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12f50 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
12f60 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
12f70 2e 54 6f 43 68 61 72 28 47 65 74 55 49 6e 74 31  .ToChar(GetUInt1
12f80 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  6(stmt, index));
12f90 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12fa0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12fb0 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
12fc0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
12fd0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
12fe0 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
12ff0 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
13000 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
13010 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
13020 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
13030 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
13040 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
13050 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
13060 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
13070 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
13080 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
13090 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
130a0 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
130b0 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
130c0 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
130d0 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
130e0 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
130f0 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
13100 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
13110 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
13120 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
13130 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
13140 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
13150 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
13160 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
13170 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
13180 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
13190 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
131a0 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
131b0 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
131c0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
131d0 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
131e0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
131f0 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
13200 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
13210 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
13220 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
13230 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
13240 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
13250 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
13260 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
13270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13280 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
13290 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
132a0 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
132b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
132c0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
132d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
132e0 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
132f0 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
13300 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13310 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
13320 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65  iteErrorCode Cre
13330 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69  ateFunction(stri
13340 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20  ng strFunction, 
13350 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20  int nArgs, bool 
13360 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c  needCollSeq, SQL
13370 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
13380 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
13390 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74   funcstep, SQLit
133a0 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66  eFinalCallback f
133b0 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63  uncfinal, bool c
133c0 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
133d0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
133e0 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
133f0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
13400 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
13410 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13420 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
13430 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
13440 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
13450 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
13460 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
13470 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
13480 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
13490 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
134a0 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20  ue) ? 1 : 0);.. 
134b0 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
134c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
134d0 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
134e0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
134f0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
13500 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
13510 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
13520 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
13530 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
13540 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
13550 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
13560 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
13570 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
13580 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
13590 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
135a0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
135b0 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
135c0 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
135d0 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
135e0 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
135f0 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
13600 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
13610 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13620 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
13630 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13640 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
13650 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
13660 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
13670 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
13680 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
13690 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
136a0 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  al);..#endif..  
136b0 20 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77      if (canThrow
136c0 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   && (n != SQLite
136d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74  ErrorCode.Ok)) t
136e0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
136f0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
13700 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
13710 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
13720 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13730 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
13740 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
13750 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
13760 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
13770 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
13780 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
13790 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c  ollation func16,
137a0 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d   bool canThrow).
137b0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
137c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
137d0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
137e0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
137f0 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
13800 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
13810 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
13820 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
13830 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
13840 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
13850 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
13860 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13870 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
13880 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
13890 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
138a0 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
138b0 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
138c0 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20     if (canThrow 
138d0 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  && (n != SQLiteE
138e0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68  rrorCode.Ok)) th
138f0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
13900 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
13910 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
13920 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
13930 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13940 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
13950 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
13960 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
13970 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
13980 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
13990 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
139a0 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
139b0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
139c0 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
139d0 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
139e0 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
139f0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
13a00 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
13a10 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
13a20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
13a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
13a40 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
13a50 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
13a60 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
13a70 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
13a80 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
13a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
13aa0 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
13ab0 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
13ac0 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
13ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
13ae0 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
13af0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
13b00 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
13b10 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
13b20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
13b30 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
13b40 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
13b50 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
13b60 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
13b70 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
13b80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
13b90 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
13ba0 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
13bb0 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
13bc0 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
13bd0 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
13be0 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(s2);....     
13bf0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
13c00 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13c10 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
13c20 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
13c30 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
13c40 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
13c50 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
13c60 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13c70 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
13c80 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
13c90 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
13ca0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13cb0 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
13cc0 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
13cd0 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
13ce0 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
13cf0 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
13d00 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20  1, char[] c2).. 
13d10 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
13d20 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13d30 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
13d40 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
13d50 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
13d60 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
13d70 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
13d80 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
13d90 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
13da0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13db0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
13dc0 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
13dd0 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
13de0 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
13df0 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
13e00 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13e10 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
13e20 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
13e30 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
13e40 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
13e50 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
13e60 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
13e70 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
13e80 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
13e90 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
13ea0 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
13eb0 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
13ec0 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
13ed0 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
13ee0 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
13ef0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
13f00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
13f10 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
13f20 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20  ytes(c1);..     
13f30 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
13f40 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d  GetBytes(c2);...
13f50 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
13f60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13f70 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
13f80 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
13f90 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
13fa0 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
13fb0 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
13fc0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
13fd0 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
13fe0 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
13ff0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
14000 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14010 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69  override Collati
14020 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
14030 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
14040 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
14050 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
14060 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ext)..    {..#if
14070 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
14080 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69  D..      Collati
14090 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d  onSequence seq =
140a0 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65   new CollationSe
140b0 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20  quence();..     
140c0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
140d0 20 20 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20       int type = 
140e0 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e  0;..      int en
140f0 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  c = 0;..      In
14100 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
14110 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14120 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
14130 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
14140 74 65 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20  text, ref type, 
14150 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e  ref enc, ref len
14160 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
14170 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
14180 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
14190 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
141a0 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
141b0 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
141c0 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
141d0 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
141e0 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
141f0 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
14200 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
14210 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
14220 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
14230 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
14240 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
14250 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
14260 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
14270 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14280 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
14290 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
142a0 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
142b0 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
142c0 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
142d0 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
142e0 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
142f0 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
14300 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14310 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
14320 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
14330 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
14340 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
14350 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
14360 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
14370 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
14380 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
14390 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
143a0 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
143b0 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
143c0 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
143d0 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
143e0 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
143f0 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
14400 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
14410 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
14420 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
14430 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
14440 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
14450 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
14460 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
14470 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
14480 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14490 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
144a0 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
144b0 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
144c0 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
144d0 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
144e0 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
144f0 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
14500 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
14510 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
14520 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
14530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
14540 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
14550 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
14560 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
14570 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
14580 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
14590 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
145a0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
145b0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
145c0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
145d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
145e0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
145f0 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20  le(ptr);..#elif 
14600 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
14610 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
14620 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20  alue = 0.0;..   
14630 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14640 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
14650 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
14660 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c  rop(ptr, ref val
14670 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ue);..      retu
14680 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
14690 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
146a0 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
146b0 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
146c0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
146d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
146e0 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61  ride int GetPara
146f0 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50  mValueInt32(IntP
14700 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
14710 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
14720 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14730 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
14740 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  nt(ptr);..    }.
14750 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14760 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
14770 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
14780 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14790 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
147a0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
147b0 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ORK..      retur
147c0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
147d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
147e0 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d  lue_int64(ptr);.
147f0 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
14800 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49  TANDARD..      I
14810 6e 74 36 34 20 76 61 6c 75 65 20 3d 20 30 3b 0d  nt64 value = 0;.
14820 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14830 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14840 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
14850 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20  nterop(ptr, ref 
14860 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
14870 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
14880 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
14890 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
148a0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
148b0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
148c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
148d0 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
148e0 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
148f0 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14900 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
14910 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
14920 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
14930 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
14940 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
14950 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14960 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f  ite3_value_text_
14970 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66  interop(ptr, ref
14980 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
14990 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
149a0 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
149b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
149c0 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
149d0 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20  _text(ptr),..   
149e0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
149f0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14a00 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72  _value_bytes(ptr
14a10 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
14a20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
14a30 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
14a40 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61  Affinity GetPara
14a50 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74  mValueType(IntPt
14a60 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
14a70 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
14a80 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14a90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
14aa0 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  pe(ptr);..    }.
14ab0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14ac0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
14ad0 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20  turnBlob(IntPtr 
14ae0 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20  context, byte[] 
14af0 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
14b00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
14b10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14b20 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
14b30 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c  text, value, val
14b40 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  ue.Length, (IntP
14b50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
14b60 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14b70 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
14b80 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
14b90 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
14ba0 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
14bb0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
14bc0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
14bd0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
14be0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14bf0 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
14c00 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  e(context, value
14c10 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
14c20 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
14c30 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
14c40 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
14c50 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  sult_double_inte
14c60 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
14c70 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
14c80 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
14c90 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
14ca0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
14cb0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
14cc0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14cd0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45  ide void ReturnE
14ce0 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
14cf0 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
14d00 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
14d10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14d20 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
14d30 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
14d40 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
14d50 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b  , value.Length);
14d60 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14d70 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14d80 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
14d90 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
14da0 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
14db0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
14dc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14dd0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
14de0 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  t(context, value
14df0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
14e00 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
14e10 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
14e20 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
14e30 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  xt, long value).
14e40 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
14e50 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
14e60 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
14e70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14e80 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
14e90 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
14ea0 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
14eb0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
14ec0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14ed0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14ee0 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
14ef0 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
14f00 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
14f10 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
14f20 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
14f30 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
14f40 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
14f50 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14f60 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14f70 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63  urnNull(IntPtr c
14f80 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
14f90 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
14fa0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14fb0 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
14fc0 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ntext);..    }..
14fd0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14fe0 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14ff0 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63  urnText(IntPtr c
15000 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
15010 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
15020 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
15030 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20  oUTF8(value);.. 
15040 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
15050 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
15060 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
15070 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
15080 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  ue), b.Length - 
15090 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
150a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
150b0 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
150c0 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
150d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
150e0 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65  / Determines the
150f0 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68   file name of th
15100 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
15110 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15120 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  native..    /// 
15130 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69  "vtshim" extensi
15140 6f 6e 20 2d 41 4e 44 2d 20 77 68 65 74 68 65 72  on -AND- whether
15150 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64 79   it should be dy
15160 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64  namically loaded
15170 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69   by..    /// thi
15180 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f  s class...    //
15190 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
151a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
151b0 65 3d 22 69 73 4c 6f 61 64 4e 65 65 64 65 64 22  e="isLoadNeeded"
151c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
151d0 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65 72  output parameter
151e0 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
151f0 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
15200 72 65 74 75 72 6e 65 64 20 6e 61 74 69 76 65 0d  returned native.
15210 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79  .    /// library
15220 20 66 69 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c   file name shoul
15230 64 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  d be dynamically
15240 20 6c 6f 61 64 65 64 20 70 72 69 6f 72 20 74 6f   loaded prior to
15250 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a 20 20 20   attempting..   
15260 20 2f 2f 2f 20 74 68 65 20 63 72 65 61 74 69 6f   /// the creatio
15270 6e 20 6f 66 20 6e 61 74 69 76 65 20 64 69 73 70  n of native disp
15280 6f 73 61 62 6c 65 20 65 78 74 65 6e 73 69 6f 6e  osable extension
15290 20 6d 6f 64 75 6c 65 73 2e 0d 0a 20 20 20 20 2f   modules...    /
152a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
152b0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
152c0 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 6c 65      /// The file
152d0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
152e0 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 6e 74  ive library cont
152f0 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76  aining the nativ
15300 65 20 22 76 74 73 68 69 6d 22 0d 0a 20 20 20 20  e "vtshim"..    
15310 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e 20 2d 4f  /// extension -O
15320 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61  R- null if it ca
15330 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
15340 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
15350 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
15360 76 61 74 65 20 73 74 72 69 6e 67 20 47 65 74 53  vate string GetS
15370 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65  himExtensionFile
15380 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 72  Name(..        r
15390 65 66 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65  ef bool isLoadNe
153a0 65 64 65 64 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a  eded /* out */..
153b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
153c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
153d0 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20  himIsLoadNeeded 
153e0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
153f0 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64        isLoadNeed
15400 65 64 20 3d 20 28 62 6f 6f 6c 29 5f 73 68 69 6d  ed = (bool)_shim
15410 49 73 4c 6f 61 64 4e 65 65 64 65 64 3b 0d 0a 20  IsLoadNeeded;.. 
15420 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 69 66         else..#if
15430 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44   SQLITE_STANDARD
15440 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f   || USE_INTEROP_
15450 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f  DLL || PLATFORM_
15460 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
15470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
15480 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 48 65 6c  LoadNeeded = Hel
15490 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e  perMethods.IsWin
154a0 64 6f 77 73 28 29 3b 20 2f 2a 20 43 4f 4d 50 41  dows(); /* COMPA
154b0 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  T */..#else..   
154c0 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e           isLoadN
154d0 65 65 64 65 64 20 3d 20 66 61 6c 73 65 3b 20 2f  eeded = false; /
154e0 2a 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  * mixed-mode ass
154f0 65 6d 62 6c 79 20 2a 2f 0d 0a 23 65 6e 64 69 66  embly */..#endif
15500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  ....        stri
15510 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 5f 73  ng fileName = _s
15520 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65  himExtensionFile
15530 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
15540 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d   if (fileName !=
15550 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15560 20 20 20 20 72 65 74 75 72 6e 20 66 69 6c 65 4e      return fileN
15570 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 28 53 51 4c  ame;....#if (SQL
15580 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c 7c 20  ITE_STANDARD || 
15590 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20  USE_INTEROP_DLL 
155a0 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  || PLATFORM_COMP
155b0 41 43 54 46 52 41 4d 45 57 4f 52 4b 29 20 26 26  ACTFRAMEWORK) &&
155c0 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f   PRELOAD_NATIVE_
155d0 4c 49 42 52 41 52 59 0d 0a 20 20 20 20 20 20 20  LIBRARY..       
155e0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
155f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 4e  tiveMethods.GetN
15600 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65  ativeLibraryFile
15610 4e 61 6d 65 4f 6e 6c 79 28 29 3b 20 2f 2a 20 43  NameOnly(); /* C
15620 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d  OMPAT */..#else.
15630 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
15640 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  null;..#endif.. 
15650 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15660 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
15670 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
15680 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
15690 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
156a0 20 74 6f 20 63 72 65 61 74 65 20 61 20 64 69 73   to create a dis
156b0 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  posable..    ///
156c0 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
156d0 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
156e0 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
156f0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
15700 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15710 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15720 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
15730 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
15740 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20 75 73   object to be us
15750 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67  ed when creating
15760 20 74 68 65 20 6e 61 74 69 76 65 20 64 69 73 70   the native disp
15770 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a  osable module...
15780 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15790 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
157a0 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
157b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
157c0 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
157d0 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ated <see cref="
157e0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
157f0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
15800 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
15810 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
15820 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
15830 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65  oid CreateModule
15840 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
15850 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
15860 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
15870 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
15880 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
15890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
158a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
158b0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
158c0 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
158d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
158e0 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4e 6f 4c 6f  lperMethods.NoLo
158f0 67 4d 6f 64 75 6c 65 28 66 6c 61 67 73 29 29 0d  gModule(flags)).
15900 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15910 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c          module.L
15920 6f 67 45 72 72 6f 72 73 20 3d 20 48 65 6c 70 65  ogErrors = Helpe
15930 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75  rMethods.LogModu
15940 6c 65 45 72 72 6f 72 28 66 6c 61 67 73 29 3b 0d  leError(flags);.
15950 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
15960 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
15970 73 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64  s = HelperMethod
15980 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70  s.LogModuleExcep
15990 74 69 6f 6e 28 66 6c 61 67 73 29 3b 0d 0a 20 20  tion(flags);..  
159a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
159b0 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
159c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
159d0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
159e0 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e  teException("con
159f0 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
15a00 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b  nvalid handle");
15a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  ....        bool
15a20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20   isLoadNeeded = 
15a30 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
15a40 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20  string fileName 
15a50 3d 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69  = GetShimExtensi
15a60 6f 6e 46 69 6c 65 4e 61 6d 65 28 72 65 66 20 69  onFileName(ref i
15a70 73 4c 6f 61 64 4e 65 65 64 65 64 29 3b 0d 0a 0d  sLoadNeeded);...
15a80 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 4c  .        if (isL
15a90 6f 61 64 4e 65 65 64 65 64 29 0d 0a 20 20 20 20  oadNeeded)..    
15aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15ab0 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
15ac0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15ad0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15ae0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15af0 69 6f 6e 28 22 74 68 65 20 66 69 6c 65 20 6e 61  ion("the file na
15b00 6d 65 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73  me for the \"vts
15b10 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20  him\" extension 
15b20 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d  is unknown");...
15b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15b40 28 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50  (_shimExtensionP
15b50 72 6f 63 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  rocName == null)
15b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b70 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
15b80 74 65 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65  teException("the
15b90 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72   entry point for
15ba0 20 74 68 65 20 5c 22 76 74 73 68 69 6d 5c 22 20   the \"vtshim\" 
15bb0 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b  extension is unk
15bc0 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nown");....     
15bd0 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78         SetLoadEx
15be0 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a  tension(true);..
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64              Load
15c00 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61  Extension(fileNa
15c10 6d 65 2c 20 5f 73 68 69 6d 45 78 74 65 6e 73 69  me, _shimExtensi
15c20 6f 6e 50 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20  onProcName);..  
15c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15c40 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72     if (module.Cr
15c50 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f  eateDisposableMo
15c60 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20  dule(_sql))..   
15c70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15c80 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73      if (_modules
15c90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15ca0 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
15cb0 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  les = new Dictio
15cc0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
15cd0 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d  iteModule>();...
15ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
15cf0 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65  dules.Add(module
15d00 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d  .Name, module);.
15d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15d20 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
15d30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73               _us
15d50 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  ePool = false;..
15d60 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
15d70 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
15d80 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
15d90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
15da0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
15db0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
15dc0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
15de0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
15df0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 72               "Cr
15e10 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c  eateModule (Pool
15e20 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22  ) Disabled: {0}"
15e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15e40 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
15e50 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
15e60 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
15e70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
15e80 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
15e90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15ea0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
15eb0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74  iteException(Get
15ec0 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
15ed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
15ee0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
15ef0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
15f00 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
15f10 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
15f20 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
15f30 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75  leanup the resou
15f40 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  rces..    /// as
15f50 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
15f60 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
15f70 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
15f80 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
15f90 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
15fa0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
15fb0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15fc0 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
15fd0 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
15fe0 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c  object previousl
15ff0 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  y passed to the 
16000 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74  <see cref="Creat
16010 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
16020 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
16030 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16040 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16050 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
16060 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
16070 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
16080 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
16090 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
160a0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
160b0 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
160c0 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
160d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
160e0 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28  d DisposeModule(
160f0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
16100 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ule, SQLiteConne
16110 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
16120 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16130 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
16140 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16150 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
16160 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
16170 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d  on("module");...
16180 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e  .        module.
16190 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
161a0 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
161b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
161c0 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67  de IntPtr Aggreg
161d0 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74  ateContext(IntPt
161e0 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
161f0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
16200 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16210 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
16220 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
16230 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20  ntext, 1);..    
16240 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
16250 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
16260 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16270 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
16280 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
16290 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
162a0 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
162b0 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
162c0 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  ble..    /// in 
162d0 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61  response to a ca
162e0 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65  ll into the <see
162f0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
16300 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
16310 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  te" />..    /// 
16320 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  or <see cref="IS
16330 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
16340 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76  e.xConnect" /> v
16350 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
16360 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  hods...    /// <
16370 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
16380 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16390 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
163a0 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  / The virtual ta
163b0 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20  ble module that 
163c0 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73  is to be respons
163d0 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72  ible for the vir
163e0 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
163f0 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72  /// being declar
16400 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
16410 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16420 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53  param name="strS
16430 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ql">..    /// Th
16440 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  e string contain
16450 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
16460 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67  ement describing
16470 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
16480 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62  le to..    /// b
16490 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  e declared...   
164a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
164b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
164c0 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
164d0 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
164e0 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
164f0 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
16500 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
16510 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
16520 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
16530 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
16540 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
16550 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
16560 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16570 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
16580 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
16590 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
165a0 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
165b0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
165c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
165d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
165e0 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54   DeclareVirtualT
165f0 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53  able(..        S
16600 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
16610 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  le,..        str
16620 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20  ing strSql,..   
16630 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
16640 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
16650 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
16660 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
16670 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
16680 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16690 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
166a0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
166b0 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
166c0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
166d0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
166e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
166f0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
16700 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Sql = IntPtr.Zer
16710 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
16720 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
16730 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
16740 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
16750 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
16760 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20  ng(strSql);.... 
16770 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16780 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
16790 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
167a0 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  ds.sqlite3_decla
167b0 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20  re_vtab(..      
167c0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
167d0 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pSql);....      
167e0 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
167f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16800 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21  Ok) && (module !
16810 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
16820 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
16830 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65  .Declared = true
16840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16850 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
16860 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
16870 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
16880 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
16890 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
168a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
168b0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
168c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
168d0 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49     if (pSql != I
168e0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
168f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16900 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16910 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53  teMemory.Free(pS
16920 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ql);..          
16930 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74        pSql = Int
16940 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
16950 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16960 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
16970 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16980 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
16990 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
169a0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
169b0 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
169c0 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
169d0 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
169e0 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  ion in response 
169f0 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  to a call into t
16a00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
16a10 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
16a20 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  e.xCreate" />.. 
16a30 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
16a40 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
16a50 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
16a60 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61  t" /> virtual ta
16a70 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20  ble methods...  
16a80 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16a90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16aa0 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
16ab0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72  .    /// The vir
16ac0 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
16ad0 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
16ae0 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20  responsible for 
16af0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
16b00 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
16b10 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
16b20 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
16b30 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16b40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75  param name="argu
16b50 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20  mentCount">..   
16b60 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
16b70 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
16b80 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
16b90 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
16ba0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16bb0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16bc0 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
16bd0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
16be0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
16bf0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
16c00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16c10 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16c20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
16c30 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
16c40 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74  ess, the content
16c50 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  s of this parame
16c60 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ter are undefine
16c70 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  d.  Upon failure
16c80 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68  ,..    /// it sh
16c90 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ould contain an 
16ca0 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
16cb0 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
16cc0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
16cd0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
16ce0 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
16cf0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
16d00 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
16d10 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
16d20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16d30 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
16d40 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61  de DeclareVirtua
16d50 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  lFunction(..    
16d60 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
16d70 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
16d80 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f    int argumentCo
16d90 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  unt,..        st
16da0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
16db0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
16dc0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
16dd0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
16de0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
16df0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
16e00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16e10 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
16e20 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
16e30 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
16e40 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
16e50 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
16e60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
16e70 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e         IntPtr pN
16e80 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
16e90 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
16ea0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
16eb0 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
16ec0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
16ed0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
16ee0 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
16ef0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16f00 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
16f10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16f20 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f  s.sqlite3_overlo
16f30 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ad_function(..  
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
16f50 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d  ql, pName, argum
16f60 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  entCount);....  
16f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
16f80 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
16f90 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47  de.Ok) error = G
16fa0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a  etLastError();..
16fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
16fc0 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20  turn n;..       
16fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
16fe0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17000 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e  pName != IntPtr.
17010 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
17020 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17030 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
17040 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d  ry.Free(pName);.
17050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17060 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e   pName = IntPtr.
17070 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
17080 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
17090 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
170a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
170b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 42 75 69  ry>..    /// Bui
170c0 6c 64 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  lds an error mes
170d0 73 61 67 65 20 73 74 72 69 6e 67 20 66 72 61 67  sage string frag
170e0 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ment containing 
170f0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66  the..    /// def
17100 69 6e 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  ined values of t
17110 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
17120 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
17130 6d 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 65  m" />..    /// e
17140 6e 75 6d 65 72 61 74 69 6f 6e 2e 0d 0a 20 20 20  numeration...   
17150 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
17160 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
17170 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
17180 62 75 69 6c 74 20 73 74 72 69 6e 67 20 66 72 61  built string fra
17190 67 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  gment...    /// 
171a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
171b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
171c0 74 72 69 6e 67 20 47 65 74 53 74 61 74 75 73 44  tring GetStatusD
171d0 62 4f 70 73 4e 61 6d 65 73 28 29 0d 0a 20 20 20  bOpsNames()..   
171e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69   {..        Stri
171f0 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
17200 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
17210 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 23 69 66 20  ilder();....#if 
17220 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
17230 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
17240 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
17250 69 6e 67 20 6e 61 6d 65 20 69 6e 20 45 6e 75 6d  ing name in Enum
17260 2e 47 65 74 4e 61 6d 65 73 28 0d 0a 20 20 20 20  .GetNames(..    
17270 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
17280 6f 66 28 53 51 4c 69 74 65 53 74 61 74 75 73 4f  of(SQLiteStatusO
17290 70 73 45 6e 75 6d 29 29 29 0d 0a 20 20 20 20 20  psEnum)))..     
172a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
172b0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
172c0 75 6c 6c 4f 72 45 6d 70 74 79 28 6e 61 6d 65 29  ullOrEmpty(name)
172d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
172e0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
172f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17300 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3e  builder.Length >
17310 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
17320 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
17330 65 6e 64 28 22 2c 20 22 29 3b 0d 0a 0d 0a 20 20  end(", ");....  
17340 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
17350 72 2e 41 70 70 65 6e 64 28 6e 61 6d 65 29 3b 0d  r.Append(name);.
17360 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6c 73  .        }..#els
17370 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  e..        //.. 
17380 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20         // TODO: 
17390 55 70 64 61 74 65 20 74 68 69 73 20 6c 69 73 74  Update this list
173a0 20 69 66 20 74 68 65 20 61 76 61 69 6c 61 62 6c   if the availabl
173b0 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0d  e values in the.
173c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
173d0 20 20 22 53 51 4c 69 74 65 43 6f 6e 66 69 67 44    "SQLiteConfigD
173e0 62 4f 70 73 45 6e 75 6d 22 20 65 6e 75 6d 65 72  bOpsEnum" enumer
173f0 61 74 69 6f 6e 20 63 68 61 6e 67 65 2e 0d 0a 20  ation change... 
17400 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17410 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
17420 64 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  dFormat(CultureI
17430 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
17440 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
17450 20 20 20 22 7b 30 7d 2c 20 7b 31 7d 2c 20 7b 32     "{0}, {1}, {2
17460 7d 2c 20 7b 33 7d 2c 20 7b 34 7d 2c 20 7b 35 7d  }, {3}, {4}, {5}
17470 2c 20 7b 36 7d 2c 20 7b 37 7d 2c 20 7b 38 7d 2c  , {6}, {7}, {8},
17480 20 7b 39 7d 2c 20 7b 31 30 7d 2c 20 7b 31 31 7d   {9}, {10}, {11}
17490 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
174a0 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
174b0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
174c0 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53  TUS_LOOKASIDE_US
174d0 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ED,..           
174e0 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73   SQLiteStatusOps
174f0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54  Enum.SQLITE_DBST
17500 41 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c  ATUS_CACHE_USED,
17510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17520 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
17530 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  m.SQLITE_DBSTATU
17540 53 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 0d 0a  S_SCHEMA_USED,..
17550 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
17560 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e  teStatusOpsEnum.
17570 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
17580 53 54 4d 54 5f 55 53 45 44 2c 0d 0a 20 20 20 20  STMT_USED,..    
17590 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
175a0 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  atusOpsEnum.SQLI
175b0 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
175c0 41 53 49 44 45 5f 48 49 54 2c 0d 0a 20 20 20 20  ASIDE_HIT,..    
175d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
175e0 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  atusOpsEnum.SQLI
175f0 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
17600 41 53 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c  ASIDE_MISS_SIZE,
17610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17620 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
17630 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  m.SQLITE_DBSTATU
17640 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
17650 5f 46 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20  _FULL,..        
17660 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73      SQLiteStatus
17670 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17680 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 48 49  BSTATUS_CACHE_HI
17690 54 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  T,..            
176a0 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
176b0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
176c0 54 55 53 5f 43 41 43 48 45 5f 4d 49 53 53 2c 0d  TUS_CACHE_MISS,.
176d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
176e0 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
176f0 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53  .SQLITE_DBSTATUS
17700 5f 43 41 43 48 45 5f 57 52 49 54 45 2c 0d 0a 20  _CACHE_WRITE,.. 
17710 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17720 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53  eStatusOpsEnum.S
17730 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 44  QLITE_DBSTATUS_D
17740 45 46 45 52 52 45 44 5f 46 4b 53 2c 0d 0a 20 20  EFERRED_FKS,..  
17750 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
17760 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51  StatusOpsEnum.SQ
17770 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41  LITE_DBSTATUS_CA
17780 43 48 45 5f 55 53 45 44 5f 53 48 41 52 45 44 29  CHE_USED_SHARED)
17790 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
177a0 20 20 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c       return buil
177b0 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  der.ToString();.
177c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
177d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
177e0 20 2f 2f 2f 20 42 75 69 6c 64 73 20 61 6e 20 65   /// Builds an e
177f0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
17800 69 6e 67 20 66 72 61 67 6d 65 6e 74 20 63 6f 6e  ing fragment con
17810 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
17820 20 2f 2f 2f 20 64 65 66 69 6e 65 64 20 76 61 6c   /// defined val
17830 75 65 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20  ues of the <see 
17840 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 66  cref="SQLiteConf
17850 69 67 44 62 4f 70 73 45 6e 75 6d 22 20 2f 3e 0d  igDbOpsEnum" />.
17860 0a 20 20 20 20 2f 2f 2f 20 65 6e 75 6d 65 72 61  .    /// enumera
17870 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
17880 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
17890 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
178a0 20 20 2f 2f 2f 20 54 68 65 20 62 75 69 6c 74 20    /// The built 
178b0 73 74 72 69 6e 67 20 66 72 61 67 6d 65 6e 74 2e  string fragment.
178c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
178d0 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
178e0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
178f0 47 65 74 43 6f 6e 66 69 67 44 62 4f 70 73 4e 61  GetConfigDbOpsNa
17900 6d 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  mes()..    {..  
17910 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
17920 64 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65  der builder = ne
17930 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
17940 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
17950 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
17960 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 66 6f  WORK..        fo
17970 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 6e 61  reach (string na
17980 6d 65 20 69 6e 20 45 6e 75 6d 2e 47 65 74 4e 61  me in Enum.GetNa
17990 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
179a0 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
179b0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
179c0 75 6d 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  um)))..        {
179d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
179e0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
179f0 72 45 6d 70 74 79 28 6e 61 6d 65 29 29 0d 0a 20  rEmpty(name)).. 
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17a10 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
17a20 20 20 20 20 20 20 20 20 69 66 20 28 62 75 69 6c          if (buil
17a30 64 65 72 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  der.Length > 0).
17a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a50 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
17a60 22 2c 20 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ", ");....      
17a70 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
17a80 70 65 6e 64 28 6e 61 6d 65 29 3b 0d 0a 20 20 20  pend(name);..   
17a90 20 20 20 20 20 7d 0d 0a 23 65 6c 73 65 0d 0a 20       }..#else.. 
17aa0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17ab0 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 55 70 64 61     // TODO: Upda
17ac0 74 65 20 74 68 69 73 20 6c 69 73 74 20 69 66 20  te this list if 
17ad0 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 76 61  the available va
17ae0 6c 75 65 73 20 69 6e 20 74 68 65 0d 0a 20 20 20  lues in the..   
17af0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 53       //       "S
17b00 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
17b10 45 6e 75 6d 22 20 65 6e 75 6d 65 72 61 74 69 6f  Enum" enumeratio
17b20 6e 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20  n change...     
17b30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 62     //..        b
17b40 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
17b50 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
17b60 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
17b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
17b80 7b 30 7d 2c 20 7b 31 7d 2c 20 7b 32 7d 2c 20 7b  {0}, {1}, {2}, {
17b90 33 7d 2c 20 7b 34 7d 2c 20 7b 35 7d 2c 20 7b 36  3}, {4}, {5}, {6
17ba0 7d 2c 20 7b 37 7d 2c 20 7b 38 7d 2c 20 7b 39 7d  }, {7}, {8}, {9}
17bb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17bc0 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
17bd0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
17be0 4f 4e 46 49 47 5f 4e 4f 4e 45 2c 0d 0a 20 20 20  ONFIG_NONE,..   
17bf0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
17c00 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53  onfigDbOpsEnum.S
17c10 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d  QLITE_DBCONFIG_M
17c20 41 49 4e 44 42 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINDBNAME,..    
17c30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
17c40 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
17c50 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f  LITE_DBCONFIG_LO
17c60 4f 4b 41 53 49 44 45 2c 0d 0a 20 20 20 20 20 20  OKASIDE,..      
17c70 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
17c80 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
17c90 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
17ca0 4c 45 5f 46 4b 45 59 2c 0d 0a 20 20 20 20 20 20  LE_FKEY,..      
17cb0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
17cc0 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
17cd0 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
17ce0 4c 45 5f 54 52 49 47 47 45 52 2c 0d 0a 20 20 20  LE_TRIGGER,..   
17cf0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
17d00 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53  onfigDbOpsEnum.S
17d10 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45  QLITE_DBCONFIG_E
17d20 4e 41 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e  NABLE_FTS3_TOKEN
17d30 49 5a 45 52 2c 0d 0a 20 20 20 20 20 20 20 20 20  IZER,..         
17d40 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44     SQLiteConfigD
17d50 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
17d60 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f  DBCONFIG_ENABLE_
17d70 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c 0d  LOAD_EXTENSION,.
17d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17d90 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
17da0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
17db0 49 47 5f 4e 4f 5f 43 4b 50 54 5f 4f 4e 5f 43 4c  IG_NO_CKPT_ON_CL
17dc0 4f 53 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  OSE,..          
17dd0 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
17de0 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17df0 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 51  BCONFIG_ENABLE_Q
17e00 50 53 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  PSG,..          
17e10 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
17e20 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17e30 42 43 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f  BCONFIG_TRIGGER_
17e40 45 51 50 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  EQP);..#endif...
17e50 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17e60 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67  builder.ToString
17e70 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
17e80 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
17e90 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
17ea0 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 6e 64   the current and
17eb0 2f 6f 72 20 68 69 67 68 77 61 74 65 72 20 76 61  /or highwater va
17ec0 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 70 65  lues for the spe
17ed0 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
17ee0 64 61 74 61 62 61 73 65 20 73 74 61 74 75 73 20  database status 
17ef0 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20 20 20  parameter...    
17f00 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17f10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17f20 61 6d 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20  ame="option">.. 
17f30 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62     /// The datab
17f40 61 73 65 20 73 74 61 74 75 73 20 70 61 72 61 6d  ase status param
17f50 65 74 65 72 20 74 6f 20 71 75 65 72 79 2e 0d 0a  eter to query...
17f60 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
17f70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17f80 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a   name="reset">..
17f90 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
17fa0 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 68 69   to reset the hi
17fb0 67 68 77 61 74 65 72 20 76 61 6c 75 65 20 74 6f  ghwater value to
17fc0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
17fd0 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ue...    /// </p
17fe0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
17ff0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 72  param name="curr
18000 65 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  ent">..    /// I
18010 66 20 61 70 70 6c 69 63 61 62 6c 65 2c 20 72 65  f applicable, re
18020 63 65 69 76 65 73 20 74 68 65 20 63 75 72 72 65  ceives the curre
18030 6e 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f  nt value...    /
18040 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18060 3d 22 68 69 67 68 77 61 74 65 72 22 3e 0d 0a 20  ="highwater">.. 
18070 20 20 20 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63     /// If applic
18080 61 62 6c 65 2c 20 72 65 63 65 69 76 65 73 20 74  able, receives t
18090 68 65 20 68 69 67 68 77 61 74 65 72 20 76 61 6c  he highwater val
180a0 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ue...    /// </p
180b0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
180c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
180d0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
180e0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
180f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
18100 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
18110 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
18120 74 65 45 72 72 6f 72 43 6f 64 65 20 47 65 74 53  teErrorCode GetS
18130 74 61 74 75 73 50 61 72 61 6d 65 74 65 72 28 0d  tatusParameter(.
18140 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
18150 74 61 74 75 73 4f 70 73 45 6e 75 6d 20 6f 70 74  tatusOpsEnum opt
18160 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  ion,..        bo
18170 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20  ol reset,..     
18180 20 20 20 72 65 66 20 69 6e 74 20 63 75 72 72 65     ref int curre
18190 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  nt,..        ref
181a0 20 69 6e 74 20 68 69 67 68 77 61 74 65 72 0d 0a   int highwater..
181b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
181c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 45  ..        if (!E
181d0 6e 75 6d 2e 49 73 44 65 66 69 6e 65 64 28 74 79  num.IsDefined(ty
181e0 70 65 6f 66 28 53 51 4c 69 74 65 53 74 61 74 75  peof(SQLiteStatu
181f0 73 4f 70 73 45 6e 75 6d 29 2c 20 6f 70 74 69 6f  sOpsEnum), optio
18200 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n))..        {..
18210 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18220 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
18230 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68  ption(HelperMeth
18240 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
18250 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18260 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
18270 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 22 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 73 74  "unrecognized st
182a0 61 74 75 73 20 6f 70 74 69 6f 6e 2c 20 6d 75 73  atus option, mus
182b0 74 20 62 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  t be: {0}",..   
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
182d0 53 74 61 74 75 73 44 62 4f 70 73 4e 61 6d 65 73  StatusDbOpsNames
182e0 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ()));..        }
182f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
18300 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
18310 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
18320 62 5f 73 74 61 74 75 73 28 0d 0a 20 20 20 20 20  b_status(..     
18330 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74         _sql, opt
18340 69 6f 6e 2c 20 72 65 66 20 63 75 72 72 65 6e 74  ion, ref current
18350 2c 20 72 65 66 20 68 69 67 68 77 61 74 65 72 2c  , ref highwater,
18360 20 72 65 73 65 74 20 3f 20 31 20 3a 20 30 29 3b   reset ? 1 : 0);
18370 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
18380 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
18390 20 20 2f 2f 2f 20 43 68 61 6e 67 65 20 61 20 63    /// Change a c
183a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
183b0 69 6f 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ion value for th
183c0 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  e database...   
183d0 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   /// connection.
183e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
183f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
18400 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f  aram name="optio
18410 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  n">..    /// The
18420 20 64 61 74 61 62 61 73 65 20 63 6f 6e 66 69 67   database config
18430 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 74  uration option t
18440 6f 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 2f  o change...    /
18450 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18460 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18470 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f  ="value">..    /
18480 2f 2f 20 54 68 65 20 6e 65 77 20 76 61 6c 75 65  // The new value
18490 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
184a0 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ed configuration
184b0 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f   option...    //
184c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
184d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
184e0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
184f0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
18500 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
18510 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18520 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18530 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18540 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f   SetConfiguratio
18550 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nOption(..      
18560 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
18570 4f 70 73 45 6e 75 6d 20 6f 70 74 69 6f 6e 2c 0d  OpsEnum option,.
18580 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
18590 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 29  value..        )
185a0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
185b0 20 69 66 20 28 21 45 6e 75 6d 2e 49 73 44 65 66   if (!Enum.IsDef
185c0 69 6e 65 64 28 74 79 70 65 6f 66 28 53 51 4c 69  ined(typeof(SQLi
185d0 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
185e0 6d 29 2c 20 6f 70 74 69 6f 6e 29 29 0d 0a 20 20  m), option))..  
185f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18600 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
18610 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48  QLiteException(H
18620 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
18630 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
18640 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
18650 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
18660 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
18670 20 20 20 20 20 20 20 20 20 22 75 6e 72 65 63 6f           "unreco
18680 67 6e 69 7a 65 64 20 63 6f 6e 66 69 67 75 72 61  gnized configura
18690 74 69 6f 6e 20 6f 70 74 69 6f 6e 2c 20 6d 75 73  tion option, mus
186a0 74 20 62 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  t be: {0}",..   
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
186c0 43 6f 6e 66 69 67 44 62 4f 70 73 4e 61 6d 65 73  ConfigDbOpsNames
186d0 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ()));..        }
186e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
186f0 63 68 20 28 6f 70 74 69 6f 6e 29 0d 0a 20 20 20  ch (option)..   
18700 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18710 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43      case SQLiteC
18720 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53  onfigDbOpsEnum.S
18730 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e  QLITE_DBCONFIG_N
18740 4f 4e 45 3a 20 2f 2f 20 6e 69 6c 0d 0a 20 20 20  ONE: // nil..   
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
18790 4f 54 45 3a 20 44 6f 20 6e 6f 74 68 69 6e 67 2c  OTE: Do nothing,
187a0 20 72 65 74 75 72 6e 20 73 75 63 63 65 73 73 2e   return success.
187b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
187c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
187e0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
187f0 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
18800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18810 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
18820 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
18830 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
18840 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45 3a 20  FIG_MAINDBNAME: 
18850 2f 2f 20 63 68 61 72 2a 0d 0a 20 20 20 20 20 20  // char*..      
18860 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
18890 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
188b0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
188c0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61  ullException("va
188d0 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
188f0 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
18900 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
18910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
18940 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
18950 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
18960 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
18990 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
189a0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
189d0 20 76 61 6c 75 65 20 74 79 70 65 20 6d 69 73 6d   value type mism
189e0 61 74 63 68 2c 20 6d 75 73 74 20 62 65 20 6f 66  atch, must be of
189f0 20 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20   type {0}",..   
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
18a20 73 74 72 69 6e 67 29 29 29 3b 0d 0a 20 20 20 20  string)));..    
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18a50 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
18a60 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51  rrorCode rc = SQ
18a70 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
18a80 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ror;..          
18a90 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
18aa0 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74   pDbName = IntPt
18ab0 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18ad0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 70 44 62 4e 61 6d 65 20 3d 20 53 51 4c     pDbName = SQL
18b10 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
18b20 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d  tPtrFromString(.
18b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
18b50 72 69 6e 67 29 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ring)value);....
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 20 69 66 20 28 70 44 62 4e          if (pDbN
18b80 61 6d 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ame == IntPtr.Ze
18b90 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18bd0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
18be0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
18c10 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 0d 0a  rorCode.NoMem,..
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 22 63 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74 65  "cannot allocate
18c50 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 22 29   database name")
18c60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18c70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
18ca0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
18cb0 2e 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  .sqlite3_db_conf
18cc0 69 67 5f 63 68 61 72 70 74 72 28 0d 0a 20 20 20  ig_charptr(..   
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f           _sql, o
18cf0 70 74 69 6f 6e 2c 20 70 44 62 4e 61 6d 65 29 3b  ption, pDbName);
18d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18d10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18d20 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
18d30 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 46 72 65 65 44 62 4e 61 6d 65 28 74 72 75    FreeDbName(tru
18d80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 64 62 4e 61 6d 65 20 3d 20 70 44 62 4e     dbName = pDbN
18db0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50    pDbName = IntP
18de0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18e10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20          if ((rc 
18e70 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
18e80 64 65 2e 4f 6b 29 20 26 26 0d 0a 20 20 20 20 20  de.Ok) &&..     
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 28 70 44 62 4e 61 6d 65 20         (pDbName 
18eb0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  != IntPtr.Zero))
18ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18ed0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
18f00 65 6d 6f 72 79 2e 46 72 65 65 28 70 44 62 4e 61  emory.Free(pDbNa
18f10 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50    pDbName = IntP
18f40 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18f70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
18fc0 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  e SQLiteConfigDb
18fd0 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
18fe0 42 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44  BCONFIG_LOOKASID
18ff0 45 3a 20 2f 2f 20 76 6f 69 64 2a 20 69 6e 74 20  E: // void* int 
19000 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
19010 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19020 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
19030 63 74 5b 5d 20 61 72 72 61 79 20 3d 20 76 61 6c  ct[] array = val
19040 75 65 20 61 73 20 6f 62 6a 65 63 74 5b 5d 3b 0d  ue as object[];.
19050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19060 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61 79         if (array
19070 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
190a0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
190b0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
190c0 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
190d0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
190e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
19100 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
19110 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
19140 74 69 6f 6e 20 76 61 6c 75 65 20 74 79 70 65 20  tion value type 
19150 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
19160 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
19170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
19190 65 6f 66 28 6f 62 6a 65 63 74 5b 5d 29 29 29 3b  eof(object[])));
191a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
191b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
191d0 66 20 28 21 28 61 72 72 61 79 5b 30 5d 20 69 73  f (!(array[0] is
191e0 20 49 6e 74 50 74 72 29 29 0d 0a 20 20 20 20 20   IntPtr))..     
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19210 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
19220 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
19230 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
19240 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
19250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
19270 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
19280 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
192b0 74 69 6f 6e 20 65 6c 65 6d 65 6e 74 20 7a 65 72  tion element zer
192c0 6f 20 28 30 29 20 74 79 70 65 20 6d 69 73 6d 61  o (0) type misma
192d0 74 63 68 2c 20 6d 75 73 74 20 62 65 20 6f 66 20  tch, must be of 
192e0 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  type {0}",..    
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49          typeof(I
19310 6e 74 50 74 72 29 29 29 3b 0d 0a 20 20 20 20 20  ntPtr)));..     
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19340 20 20 20 20 20 20 20 20 69 66 20 28 21 28 61 72          if (!(ar
19350 72 61 79 5b 31 5d 20 69 73 20 69 6e 74 29 29 0d  ray[1] is int)).
19360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19370 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
193a0 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72  Exception(Helper
193b0 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
193c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
193f0 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
19420 66 69 67 75 72 61 74 69 6f 6e 20 65 6c 65 6d 65  figuration eleme
19430 6e 74 20 6f 6e 65 20 28 31 29 20 74 79 70 65 20  nt one (1) type 
19440 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
19450 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
19460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
19480 65 6f 66 28 69 6e 74 29 29 29 3b 0d 0a 20 20 20  eof(int)));..   
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
194b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
194c0 61 72 72 61 79 5b 32 5d 20 69 73 20 69 6e 74 29  array[2] is int)
194d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
194e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
19510 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
19520 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
19530 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
19560 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
19570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
19590 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 65 6c 65  onfiguration ele
195a0 6d 65 6e 74 20 74 77 6f 20 28 32 29 20 74 79 70  ment two (2) typ
195b0 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74  e mismatch, must
195c0 20 62 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22   be of type {0}"
195d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
195f0 79 70 65 6f 66 28 69 6e 74 29 29 29 3b 0d 0a 20  ypeof(int)));.. 
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19620 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19630 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
19640 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
19650 62 5f 63 6f 6e 66 69 67 5f 69 6e 74 70 74 72 5f  b_config_intptr_
19660 74 77 6f 5f 69 6e 74 73 28 0d 0a 20 20 20 20 20  two_ints(..     
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c     _sql, option,
19690 20 28 49 6e 74 50 74 72 29 61 72 72 61 79 5b 30   (IntPtr)array[0
196a0 5d 2c 20 28 69 6e 74 29 61 72 72 61 79 5b 31 5d  ], (int)array[1]
196b0 2c 20 28 69 6e 74 29 61 72 72 61 79 5b 32 5d 29  , (int)array[2])
196c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
196d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
196e0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
196f0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
19700 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
19710 42 4c 45 5f 46 4b 45 59 3a 20 2f 2f 20 69 6e 74  BLE_FKEY: // int
19720 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20   int*..         
19730 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f     case SQLiteCo
19740 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
19750 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
19760 41 42 4c 45 5f 54 52 49 47 47 45 52 3a 20 2f 2f  ABLE_TRIGGER: //
19770 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20   int int*..     
19780 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19790 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
197a0 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
197b0 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 54 4f  G_ENABLE_FTS3_TO
197c0 4b 45 4e 49 5a 45 52 3a 20 2f 2f 20 69 6e 74 20  KENIZER: // int 
197d0 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20  int*..          
197e0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
197f0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
19800 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
19810 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  BLE_LOAD_EXTENSI
19820 4f 4e 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d  ON: // int int*.
19830 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
19840 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  e SQLiteConfigDb
19850 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
19860 42 43 4f 4e 46 49 47 5f 4e 4f 5f 43 4b 50 54 5f  BCONFIG_NO_CKPT_
19870 4f 4e 5f 43 4c 4f 53 45 3a 20 2f 2f 20 69 6e 74  ON_CLOSE: // int
19880 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20   int*..         
19890 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f     case SQLiteCo
198a0 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
198b0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
198c0 41 42 4c 45 5f 51 50 53 47 3a 20 2f 2f 20 69 6e  ABLE_QPSG: // in
198d0 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20  t int*..        
198e0 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43      case SQLiteC
198f0 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53  onfigDbOpsEnum.S
19900 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54  QLITE_DBCONFIG_T
19910 52 49 47 47 45 52 5f 45 51 50 3a 20 2f 2f 20 69  RIGGER_EQP: // i
19920 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20  nt int*..       
19930 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
19940 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
19950 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
19960 52 45 53 45 54 5f 44 41 54 41 42 41 53 45 3a 20  RESET_DATABASE: 
19970 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20  // int int*..   
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
199b0 69 73 20 62 6f 6f 6c 29 29 0d 0a 20 20 20 20 20  is bool))..     
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
199d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199e0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
199f0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
19a00 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
19a10 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
19a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
19a40 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
19a50 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
19a80 74 69 6f 6e 20 76 61 6c 75 65 20 74 79 70 65 20  tion value type 
19a90 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
19aa0 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
19ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
19ad0 65 6f 66 28 62 6f 6f 6c 29 29 29 3b 0d 0a 20 20  eof(bool)));..  
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19b00 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72             int r
19b10 65 73 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 4e 4f  esult = 0; /* NO
19b20 54 20 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20  T USED */....   
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
19b50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19b60 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e  te3_db_config_in
19b70 74 5f 72 65 66 69 6e 74 28 0d 0a 20 20 20 20 20  t_refint(..     
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c     _sql, option,
19ba0 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65 20 3f 20   ((bool)value ? 
19bb0 31 20 3a 20 30 29 2c 20 72 65 66 20 72 65 73 75  1 : 0), ref resu
19bc0 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lt);..          
19bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19be0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c10 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
19c20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
19c30 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
19c40 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
19c70 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
19c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c90 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75 70            "unsup
19ca0 70 6f 72 74 65 64 20 63 6f 6e 66 69 67 75 72 61  ported configura
19cb0 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 7b 30 7d 22  tion option {0}"
19cc0 2c 20 6f 70 74 69 6f 6e 29 29 3b 0d 0a 20 20 20  , option));..   
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19ce0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
19cf0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
19d00 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45  mary>..    /// E
19d10 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
19d20 65 73 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  es extension loa
19d30 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d  ding by SQLite..
19d40 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
19d50 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
19d60 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66  ram name="bOnOff
19d70 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  ">..    /// True
19d80 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69   to enable loadi
19d90 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73  ng of extensions
19da0 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62  , false to disab
19db0 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
19dc0 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
19dd0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
19de0 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69  d SetLoadExtensi
19df0 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  on(bool bOnOff).
19e00 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
19e10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
19e20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  n;....        if
19e30 20 28 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e   (SQLiteVersionN
19e40 75 6d 62 65 72 20 3e 3d 20 33 30 31 33 30 30 30  umber >= 3013000
19e50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
19e60 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 65            n = Se
19e70 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70  tConfigurationOp
19e80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
19e90 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
19ea0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
19eb0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
19ec0 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  BLE_LOAD_EXTENSI
19ed0 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ON,..           
19ee0 20 20 20 20 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20       bOnOff);.. 
19ef0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19f00 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
19f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
19f20 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
19f30 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
19f40 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
19f50 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
19f60 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
19f70 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
19f80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
19f90 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
19fa0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
19fb0 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
19fc0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
19fd0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
19fe0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
19ff0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1a000 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
1a010 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
1a020 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
1a030 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
1a040 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a050 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1a060 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
1a070 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
1a080 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
1a090 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
1a0a0 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
1a0b0 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
1a0c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1a0d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1a0e0 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
1a0f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
1a100 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
1a110 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
1a120 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
1a130 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
1a140 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
1a150 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
1a160 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
1a170 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
1a180 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
1a190 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
1a1a0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1a1b0 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
1a1c0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
1a1d0 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
1a1e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1a1f0 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d    if (fileName =
1a200 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1a210 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1a220 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1a230 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29  tion("fileName")
1a240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
1a250 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  Ptr pError = Int
1a260 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
1a270 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1a280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a290 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65   byte[] utf8File
1a2a0 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
1a2b0 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
1a2c0 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30  s(fileName + '\0
1a2d0 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
1a2e0 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63   byte[] utf8Proc
1a2f0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
1a300 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a310 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  procName != null
1a320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a330 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20     utf8ProcName 
1a340 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
1a350 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f  TF8.GetBytes(pro
1a360 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  cName + '\0');..
1a370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1a380 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1a390 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1a3a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
1a3b0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
1a3d0 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d  sql, utf8FileNam
1a3e0 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c  e, utf8ProcName,
1a3f0 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d   ref pError);...
1a400 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a410 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
1a420 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
1a430 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1a440 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1a450 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74  tion(n, UTF8ToSt
1a460 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29  ring(pError, -1)
1a470 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
1a480 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1a490 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a4a0 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f         if (pErro
1a4b0 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
1a4c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4e0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1a4f0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72  thods.sqlite3_fr
1a500 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ee(pError);..   
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
1a520 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
1a530 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
1a540 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
1a550 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
1a560 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
1a570 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
1a580 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
1a590 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
1a5a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1a5b0 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
1a5c0 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
1a5d0 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
1a5e0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
1a5f0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
1a600 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a610 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
1a620 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
1a630 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
1a640 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
1a650 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69   0));....      i
1a660 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
1a670 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
1a680 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1a690 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
1a6a0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
1a6b0 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
1a6c0 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
1a6d0 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
1a6e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1a6f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a700 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
1a710 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
1a720 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
1a730 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
1a740 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
1a750 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
1a760 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
1a770 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
1a780 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
1a790 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
1a7a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78  LiteErrorCode Ex
1a7b0 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
1a7c0 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1a7d0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1a7e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a7f0 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
1a800 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
1a810 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
1a820 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
1a830 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
1a840 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
1a850 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
1a860 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1a870 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  d LogMessage(SQL
1a880 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72  iteErrorCode iEr
1a890 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
1a8a0 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
1a8b0 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67 4d        StaticLogM
1a8c0 65 73 73 61 67 65 28 69 45 72 72 43 6f 64 65 2c  essage(iErrCode,
1a8d0 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20   zMessage);..   
1a8e0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
1a8f0 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
1a900 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
1a910 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
1a920 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
1a930 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20  nal static void 
1a940 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65  StaticLogMessage
1a950 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
1a960 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
1a970 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
1a980 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
1a990 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1a9a0 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
1a9b0 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
1a9c0 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
1a9d0 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
1a9e0 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e  EC || INTEROP_IN
1a9f0 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 69  CLUDE_SEE..    i
1aa00 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1aa10 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
1aa20 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
1aa30 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
1aa40 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1aa50 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
1aa60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1aa70 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20  lite3_key(_sql, 
1aa80 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70  passwordBytes, p
1aa90 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
1aaa0 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
1aab0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
1aac0 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
1aad0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1aae0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
1aaf0 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
1ab00 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
1ab10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ab20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
1ab30 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
1ab40 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1ab50 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1ab60 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
1ab70 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
1ab80 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
1ab90 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75  t(..          Cu
1aba0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1abb0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1abc0 20 20 20 20 20 22 53 65 74 50 61 73 73 77 6f 72       "SetPasswor
1abd0 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65  d (Pool) Disable
1abe0 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  d: {0}",..      
1abf0 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
1ac00 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
1ac10 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1ac20 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1ac30 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68  override void Ch
1ac40 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
1ac50 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
1ac60 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
1ac70 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1ac80 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
1ac90 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1aca0 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20  te3_rekey(_sql, 
1acb0 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
1acc0 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79  , (newPasswordBy
1acd0 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30  tes == null) ? 0
1ace0 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79   : newPasswordBy
1acf0 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
1ad00 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
1ad10 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1ad20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1ad30 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
1ad40 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1ad50 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 75 73 65  ..      if (_use
1ad60 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Pool)..      {..
1ad70 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c          _usePool
1ad80 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
1ad90 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1ada0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1adb0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72  TION..        Tr
1adc0 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
1add0 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
1ade0 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
1adf0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1ae00 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1ae10 0d 0a 20 20 20 20 20 20 20 20 20 20 22 43 68 61  ..          "Cha
1ae20 6e 67 65 50 61 73 73 77 6f 72 64 20 28 50 6f 6f  ngePassword (Poo
1ae30 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
1ae40 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 48 61  ",..          Ha
1ae50 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
1ae60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
1ae70 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
1ae80 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
1ae90 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1aea0 53 65 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28  SetProgressHook(
1aeb0 69 6e 74 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65  int nOps, SQLite
1aec0 50 72 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b  ProgressCallback
1aed0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1aee0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1aef0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1af00 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64  e3_progress_hand
1af10 6c 65 72 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20  ler(_sql, nOps, 
1af20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
1af30 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
1af40 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1af50 69 64 65 20 76 6f 69 64 20 53 65 74 41 75 74 68  ide void SetAuth
1af60 6f 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74  orizerHook(SQLit
1af70 65 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62  eAuthorizerCallb
1af80 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
1af90 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
1afa0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1afb0 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
1afc0 65 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  er(_sql, func, I
1afd0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
1afe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1aff0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1b000 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
1b010 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
1b020 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
1b030 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
1b040 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1b050 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
1b060 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
1b070 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
1b080 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1b090 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1b0a0 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51  SetCommitHook(SQ
1b0b0 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  LiteCommitCallba
1b0c0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
1b0d0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
1b0e0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b0f0 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f  e3_commit_hook(_
1b100 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
1b110 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
1b120 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b130 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1b140 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
1b150 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
1b160 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
1b170 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
1b180 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b190 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66  e3_trace(_sql, f
1b1a0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
1b1b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1b1c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1b1d0 64 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65  de void SetTrace
1b1e0 43 61 6c 6c 62 61 63 6b 32 28 53 51 4c 69 74 65  Callback2(SQLite
1b1f0 54 72 61 63 65 46 6c 61 67 73 20 6d 61 73 6b 2c  TraceFlags mask,
1b200 20 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c   SQLiteTraceCall
1b210 62 61 63 6b 32 20 66 75 6e 63 29 0d 0a 20 20 20  back2 func)..   
1b220 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61   {..        Unsa
1b230 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1b240 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32  sqlite3_trace_v2
1b250 28 5f 73 71 6c 2c 20 6d 61 73 6b 2c 20 66 75 6e  (_sql, mask, fun
1b260 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
1b270 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b280 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b290 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
1b2a0 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
1b2b0 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
1b2c0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
1b2d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1b2e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
1b2f0 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
1b300 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
1b310 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
1b320 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1b330 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
1b340 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
1b350 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
1b360 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
1b370 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
1b380 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
1b390 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
1b3a0 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
1b3b0 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
1b3c0 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
1b3d0 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
1b3e0 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
1b3f0 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
1b400 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1b410 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1b420 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
1b430 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
1b440 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
1b450 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1b460 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
1b470 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
1b480 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1b490 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
1b4a0 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
1b4b0 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
1b4c0 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
1b4d0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b4e0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1b4f0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
1b500 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b510 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a  e3_config_log(..
1b520 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1b530 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
1b540 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
1b550 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  G, func, IntPtr.
1b560 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
1b570 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
1b580 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
1b590 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 65  .            _se
1b5a0 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 3d 20 28  tLogCallback = (
1b5b0 66 75 6e 63 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a  func != null);..
1b5c0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1b5d0 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
1b5e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b640 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
1b650 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1b660 20 41 70 70 65 6e 64 73 20 61 6e 20 65 72 72 6f   Appends an erro
1b670 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20 61 6e  r message and an
1b680 20 61 70 70 72 6f 70 72 69 61 74 65 20 6c 69 6e   appropriate lin
1b690 65 2d 65 6e 64 69 6e 67 20 74 6f 20 61 20 3c 73  e-ending to a <s
1b6a0 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 42  ee cref="StringB
1b6b0 75 69 6c 64 65 72 22 20 2f 3e 0d 0a 20 20 20 20  uilder" />..    
1b6c0 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54  /// instance.  T
1b6d0 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 62 65  his is useful be
1b6e0 63 61 75 73 65 20 74 68 65 20 2e 4e 45 54 20 43  cause the .NET C
1b6f0 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b  ompact Framework
1b700 20 68 61 73 20 61 20 73 6c 69 67 68 74 6c 79 20   has a slightly 
1b710 64 69 66 66 65 72 65 6e 74 20 73 65 74 0d 0a 20  different set.. 
1b720 20 20 20 2f 2f 2f 20 6f 66 20 73 75 70 70 6f 72     /// of suppor
1b730 74 65 64 20 6d 65 74 68 6f 64 73 20 66 6f 72 20  ted methods for 
1b740 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
1b750 74 72 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e  tringBuilder" />
1b760 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f   class...    ///
1b770 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1b780 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1b790 3d 22 62 75 69 6c 64 65 72 22 3e 0d 0a 20 20 20  ="builder">..   
1b7a0 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1b7b0 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c 64 65  ef="StringBuilde
1b7c0 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74  r" /> instance t
1b7d0 6f 20 61 70 70 65 6e 64 20 74 6f 2e 0d 0a 20 20  o append to...  
1b7e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1b7f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1b800 61 6d 65 3d 22 6d 65 73 73 61 67 65 22 3e 0d 0a  ame="message">..
1b810 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73 73      /// The mess
1b820 61 67 65 20 74 6f 20 61 70 70 65 6e 64 2e 20 20  age to append.  
1b830 49 74 20 77 69 6c 6c 20 62 65 20 66 6f 6c 6c 6f  It will be follo
1b840 77 65 64 20 62 79 20 61 6e 20 61 70 70 72 6f 70  wed by an approp
1b850 72 69 61 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e  riate line-endin
1b860 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  g...    /// </pa
1b870 72 61 6d 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ram>..    privat
1b880 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
1b890 70 65 6e 64 45 72 72 6f 72 28 0d 0a 20 20 20 20  pendError(..    
1b8a0 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
1b8b0 72 20 62 75 69 6c 64 65 72 2c 0d 0a 20 20 20 20  r builder,..    
1b8c0 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
1b8d0 67 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ge..        ).. 
1b8e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
1b8f0 20 28 62 75 69 6c 64 65 72 20 3d 3d 20 6e 75 6c   (builder == nul
1b900 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b910 72 65 74 75 72 6e 3b 0d 0a 0d 0a 23 69 66 20 21  return;....#if !
1b920 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
1b930 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
1b940 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
1b950 64 4c 69 6e 65 28 6d 65 73 73 61 67 65 29 3b 0d  dLine(message);.
1b960 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1b970 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6d  builder.Append(m
1b980 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
1b990 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
1b9a0 28 22 5c 72 5c 6e 22 29 3b 0d 0a 23 65 6e 64 69  ("\r\n");..#endi
1b9b0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
1b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ba20 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1ba30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
1ba40 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70  is method attemp
1ba50 74 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  ts to cause the 
1ba60 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69  SQLite native li
1ba70 62 72 61 72 79 20 74 6f 20 69 6e 76 61 6c 69 64  brary to invalid
1ba80 61 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 73  ate..    /// its
1ba90 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
1baa0 72 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  rs that refer to
1bab0 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 20   this instance. 
1bac0 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61   This is necessa
1bad0 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 70  ry..    /// to p
1bae0 72 65 76 65 6e 74 20 63 61 6c 6c 73 20 66 72 6f  revent calls fro
1baf0 6d 20 6e 61 74 69 76 65 20 63 6f 64 65 20 69 6e  m native code in
1bb00 74 6f 20 64 65 6c 65 67 61 74 65 73 20 74 68 61  to delegates tha
1bb10 74 20 6d 61 79 20 68 61 76 65 20 62 65 65 6e 0d  t may have been.
1bb20 0a 20 20 20 20 2f 2f 2f 20 67 61 72 62 61 67 65  .    /// garbage
1bb30 20 63 6f 6c 6c 65 63 74 65 64 2e 20 20 4e 6f 72   collected.  Nor
1bb40 6d 61 6c 6c 79 2c 20 74 68 65 73 65 20 74 79 70  mally, these typ
1bb50 65 73 20 6f 66 20 69 73 73 75 65 73 20 63 61 6e  es of issues can
1bb60 20 6f 6e 6c 79 20 61 72 69 73 65 20 66 6f 72 0d   only arise for.
1bb70 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
1bb80 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 61 64  ions that are ad
1bb90 64 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 3b  ded to the pool;
1bba0 20 68 6f 77 76 65 72 2c 20 69 74 20 69 73 20 67   howver, it is g
1bbb0 6f 6f 64 20 70 72 61 63 74 69 63 65 20 74 6f 0d  ood practice to.
1bbc0 0a 20 20 20 20 2f 2f 2f 20 75 6e 63 6f 6e 64 69  .    /// uncondi
1bbd0 74 69 6f 6e 61 6c 6c 79 20 69 6e 76 61 6c 69 64  tionally invalid
1bbe0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  ate function poi
1bbf0 6e 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 72  nters that may r
1bc00 65 66 65 72 20 74 6f 20 6f 62 6a 65 63 74 73 0d  efer to objects.
1bc10 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64  .    /// being d
1bc20 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  isposed...    //
1bc30 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1bc40 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1bc50 65 3d 22 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c  e="includeGlobal
1bc60 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ">..    /// Non-
1bc70 7a 65 72 6f 20 74 6f 20 61 6c 73 6f 20 69 6e 76  zero to also inv
1bc80 61 6c 69 64 61 74 65 20 67 6c 6f 62 61 6c 20 66  alidate global f
1bc90 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73  unction pointers
1bca0 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 74 68 61   (i.e. those tha
1bcb0 74 0d 0a 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e  t..    /// are n
1bcc0 6f 74 20 64 69 72 65 63 74 6c 79 20 61 73 73 6f  ot directly asso
1bcd0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1bce0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 74   connection on t
1bcf0 68 65 20 6e 61 74 69 76 65 20 73 69 64 65 29 2e  he native side).
1bd00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1bd10 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1bd20 61 6d 20 6e 61 6d 65 3d 22 63 61 6e 54 68 72 6f  am name="canThro
1bd30 77 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  w">..    /// Non
1bd40 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65  -zero if this me
1bd50 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20 65 78  thod is being ex
1bd60 65 63 75 74 65 64 20 77 69 74 68 69 6e 20 61 20  ecuted within a 
1bd70 63 6f 6e 74 65 78 74 20 77 68 65 72 65 20 69 74  context where it
1bd80 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68   can..    /// th
1bd90 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
1bda0 20 69 6e 20 74 68 65 20 65 76 65 6e 74 20 6f 66   in the event of
1bdb0 20 66 61 69 6c 75 72 65 3b 20 6f 74 68 65 72 77   failure; otherw
1bdc0 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  ise, zero...    
1bdd0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1bde0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1bdf0 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
1be00 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
1be10 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 3b   was successful;
1be20 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f   otherwise, zero
1be30 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
1be40 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
1be50 74 65 20 62 6f 6f 6c 20 55 6e 68 6f 6f 6b 4e 61  te bool UnhookNa
1be60 74 69 76 65 43 61 6c 6c 62 61 63 6b 73 28 0d 0a  tiveCallbacks(..
1be70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 63          bool inc
1be80 6c 75 64 65 47 6c 6f 62 61 6c 2c 0d 0a 20 20 20  ludeGlobal,..   
1be90 20 20 20 20 20 62 6f 6f 6c 20 63 61 6e 54 68 72       bool canThr
1bea0 6f 77 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ow..        ).. 
1beb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
1bec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
1bed0 45 3a 20 49 6e 69 74 69 61 6c 6c 79 2c 20 74 68  E: Initially, th
1bee0 69 73 20 6d 65 74 68 6f 64 20 61 73 73 75 6d 65  is method assume
1bef0 73 20 73 75 63 63 65 73 73 2e 20 20 54 68 65 6e  s success.  Then
1bf00 2c 20 69 66 20 61 6e 79 20 61 74 74 65 6d 70 74  , if any attempt
1bf10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1bf20 20 20 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65     to invalidate
1bf30 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e   a function poin
1bf40 74 65 72 20 66 61 69 6c 73 2c 20 74 68 65 20 6f  ter fails, the o
1bf50 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
1bf60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1bf70 20 20 20 73 65 74 20 74 6f 20 66 61 69 6c 75 72     set to failur
1bf80 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 69  e.  However, thi
1bf90 73 20 77 69 6c 6c 20 6e 6f 74 20 70 72 65 76 65  s will not preve
1bfa0 6e 74 20 66 75 72 74 68 65 72 0d 0a 20 20 20 20  nt further..    
1bfb0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 74 74      //       att
1bfc0 65 6d 70 74 73 2c 20 69 66 20 61 6e 79 2c 20 74  empts, if any, t
1bfd0 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 73 75 62  o invalidate sub
1bfe0 73 65 71 75 65 6e 74 20 66 75 6e 63 74 69 6f 6e  sequent function
1bff0 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20   pointers...    
1c000 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c010 62 6f 6f 6c 20 72 65 73 75 6c 74 20 3d 20 74 72  bool result = tr
1c020 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ue;..        SQL
1c030 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
1c040 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1c050 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 53  e.Ok;..        S
1c060 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69  tringBuilder bui
1c070 6c 64 65 72 20 3d 20 6e 65 77 20 53 74 72 69 6e  lder = new Strin
1c080 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20  gBuilder();.... 
1c090 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1c100 65 67 69 6f 6e 20 52 6f 6c 6c 62 61 63 6b 20 48  egion Rollback H
1c110 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74  ook (Per-Connect
1c120 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72  ion)..        tr
1c130 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
1c140 20 20 20 20 20 20 20 20 20 20 53 65 74 52 6f 6c            SetRol
1c150 6c 62 61 63 6b 48 6f 6f 6b 28 6e 75 6c 6c 29 3b  lbackHook(null);
1c160 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1c170 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
1c180 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1c190 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1c1a0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1c1b0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1c1c0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
1c1d0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1c1e0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1c1f0 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
1c200 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1c210 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1c220 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1c230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c250 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1c260 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1c270 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
1c290 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1c2a0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c2c0 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  Failed to unset 
1c2d0 72 6f 6c 6c 62 61 63 6b 20 68 6f 6f 6b 3a 20 7b  rollback hook: {
1c2e0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
1c2f0 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
1c300 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1c310 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c320 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1c330 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c350 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1c360 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
1c370 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
1c380 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
1c390 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74  ilder, "failed t
1c3a0 6f 20 75 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b  o unset rollback
1c3b0 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20   hook");..      
1c3c0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74        rc = SQLit
1c3d0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1c3e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c3f0 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
1c400 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1c410 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1c420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c490 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20    #region Trace 
1c4a0 43 61 6c 6c 62 61 63 6b 20 28 50 65 72 2d 43 6f  Callback (Per-Co
1c4b0 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  nnection)..     
1c4c0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1c4d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
1c4e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
1c4f0 2f 20 4e 4f 54 45 3a 20 57 68 65 6e 20 75 73 69  / NOTE: When usi
1c500 6e 67 20 76 65 72 73 69 6f 6e 20 33 2e 31 34 20  ng version 3.14 
1c510 28 6f 72 20 6c 61 74 65 72 29 20 6f 66 20 74 68  (or later) of th
1c520 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core.. 
1c530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c540 20 20 20 20 6c 69 62 72 61 72 79 2c 20 75 73 65      library, use
1c550 20 74 68 65 20 6e 65 77 65 72 20 73 71 6c 69 74   the newer sqlit
1c560 65 33 5f 74 72 61 63 65 5f 76 32 28 29 20 41 50  e3_trace_v2() AP
1c570 49 20 69 6e 20 6f 72 64 65 72 0d 0a 20 20 20 20  I in order..    
1c580 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c590 20 74 6f 20 75 6e 68 6f 6f 6b 20 74 68 65 20 74   to unhook the t
1c5a0 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2c 20 6a  race callback, j
1c5b0 75 73 74 20 69 6e 20 63 61 73 65 20 74 68 65 20  ust in case the 
1c5c0 6f 6c 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20  older..         
1c5d0 20 20 20 2f 2f 20 20 20 20 20 20 20 41 50 49 20     //       API 
1c5e0 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
1c5f0 20 28 65 2e 67 2e 20 53 51 4c 49 54 45 5f 4f 4d   (e.g. SQLITE_OM
1c600 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 2e 0d  IT_DEPRECATED)..
1c610 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
1c620 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1c630 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
1c640 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
1c650 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
1c660 20 3e 3d 20 33 30 31 34 30 30 30 29 0d 0a 20 20   >= 3014000)..  
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
1c680 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 32 28  tTraceCallback2(
1c690 53 51 4c 69 74 65 54 72 61 63 65 46 6c 61 67 73  SQLiteTraceFlags
1c6a0 2e 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f  .SQLITE_TRACE_NO
1c6b0 4e 45 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68  NE, null); /* th
1c6c0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1c6d0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1c6e0 20 20 20 20 20 20 20 20 20 20 53 65 74 54 72 61            SetTra
1c6f0 63 65 43 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29  ceCallback(null)
1c700 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1c710 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
1c720 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1c730 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1c740 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  N..        catch
1c750 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1c760 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63  #else..        c
1c770 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29  atch (Exception)
1c780 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1c790 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1c7a0 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1c7b0 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1c7c0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1c7d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c7f0 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
1c800 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
1c810 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1c830 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1c840 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "Failed to unset
1c870 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 3a   trace callback:
1c880 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1c890 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1c8a0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1c8b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c8c0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c8f0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1c900 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1c910 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1c920 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28      AppendError(
1c930 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64  builder, "failed
1c940 20 74 6f 20 75 6e 73 65 74 20 74 72 61 63 65 20   to unset trace 
1c950 63 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20  callback");..   
1c960 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1c970 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1c980 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ror;....        
1c990 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c      result = fal
1c9a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
1c9b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1c9c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1c9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ca30 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
1ca40 6d 69 74 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f  mit Hook (Per-Co
1ca50 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  nnection)..     
1ca60 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1ca70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1ca80 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 6e 75 6c  etCommitHook(nul
1ca90 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  l); /* throw */.
1caa0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20  .        }..#if 
1cab0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1cac0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1cad0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74  ION..        cat
1cae0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1caf0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1cb00 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1cb10 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  n)..#endif..    
1cb20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
1cb30 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1cb40 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1cb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1cb90 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1cba0 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
1cbd0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73    "Failed to uns
1cc00 65 74 20 63 6f 6d 6d 69 74 20 68 6f 6f 6b 3a 20  et commit hook: 
1cc10 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1cc20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20             e)); 
1cc30 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1cc40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cc50 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1cc60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1cc80 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1cc90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
1cca0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
1ccb0 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62     AppendError(b
1ccc0 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20  uilder, "failed 
1ccd0 74 6f 20 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20  to unset commit 
1cce0 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  hook");..       
1ccf0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65       rc = SQLite
1cd00 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
1cd10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cd20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d  result = false;.
1cd30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1cd40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1cd50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1cd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cdc0 20 23 72 65 67 69 6f 6e 20 55 70 64 61 74 65 20   #region Update 
1cdd0 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63  Hook (Per-Connec
1cde0 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74  tion)..        t
1cdf0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
1ce00 20 20 20 20 20 20 20 20 20 20 20 53 65 74 55 70             SetUp
1ce10 64 61 74 65 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20  dateHook(null); 
1ce20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1ce30 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54       }..#if !NET
1ce40 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1ce50 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1ce60 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
1ce70 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65  Exception e)..#e
1ce80 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74  lse..        cat
1ce90 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a  ch (Exception)..
1cea0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1ceb0 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
1cec0 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
1ced0 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
1cee0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1cef0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1cf10 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
1cf20 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
1cf30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
1cf50 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
1cf60 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
1cf80 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 75  ailed to unset u
1cf90 70 64 61 74 65 20 68 6f 6f 6b 3a 20 7b 30 7d 22  pdate hook: {0}"
1cfa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cfb0 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74         e)); /* t
1cfc0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1cfd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cfe0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
1cff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d000 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
1d010 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
1d020 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
1d030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
1d040 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
1d050 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75  er, "failed to u
1d060 6e 73 65 74 20 75 70 64 61 74 65 20 68 6f 6f 6b  nset update hook
1d070 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1d080 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1d090 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a  rCode.Error;....
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d0b0 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
1d0c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d0d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1d0e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d140 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1d150 67 69 6f 6e 20 41 75 74 68 6f 72 69 7a 65 72 20  gion Authorizer 
1d160 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63  Hook (Per-Connec
1d170 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74  tion)..        t
1d180 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
1d190 20 20 20 20 20 20 20 20 20 20 20 53 65 74 41 75             SetAu
1d1a0 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 6e 75 6c  thorizerHook(nul
1d1b0 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  l); /* throw */.
1d1c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20  .        }..#if 
1d1d0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1d1e0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1d1f0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74  ION..        cat
1d200 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1d210 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1d220 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1d230 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  n)..#endif..    
1d240 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
1d250 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1d260 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1d270 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1d280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1d2b0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1d2c0 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
1d2f0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d310 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73    "Failed to uns
1d320 65 74 20 61 75 74 68 6f 72 69 7a 65 72 20 68 6f  et authorizer ho
1d330 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ok: {0}",..     
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d350 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
1d360 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d370 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1d380 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  h..            {
1d390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d3a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1d3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d3c0 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
1d3d0 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72         AppendErr
1d3e0 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69  or(builder, "fai
1d3f0 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 61 75 74  led to unset aut
1d400 68 6f 72 69 7a 65 72 20 68 6f 6f 6b 22 29 3b 0d  horizer hook");.
1d410 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
1d420 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1d430 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20  e.Error;....    
1d440 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
1d450 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1d460 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1d470 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1d480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d4e0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1d4f0 20 50 72 6f 67 72 65 73 73 20 48 6f 6f 6b 20 28   Progress Hook (
1d500 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d  Per-Connection).
1d510 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1d520 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d530 20 20 20 20 20 53 65 74 50 72 6f 67 72 65 73 73       SetProgress
1d540 48 6f 6f 6b 28 30 2c 20 6e 75 6c 6c 29 3b 20 2f  Hook(0, null); /
1d550 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1d560 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
1d570 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1d580 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1d590 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1d5a0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
1d5b0 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
1d5c0 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
1d5d0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
1d5e0 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1d5f0 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1d600 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1d610 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1d620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d630 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d640 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1d650 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1d660 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1d670 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
1d680 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1d690 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
1d6b0 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 70 72  iled to unset pr
1d6c0 6f 67 72 65 73 73 20 68 6f 6f 6b 3a 20 7b 30 7d  ogress hook: {0}
1d6d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1d6e0 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
1d6f0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1d700 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d710 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
1d720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
1d740 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
1d750 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
1d760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d770 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
1d780 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  der, "failed to 
1d790 75 6e 73 65 74 20 70 72 6f 67 72 65 73 73 20 68  unset progress h
1d7a0 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ook");..        
1d7b0 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45      rc = SQLiteE
1d7c0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
1d7d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1d7e0 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  esult = false;..
1d7f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1d800 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1d810 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1d820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d880 23 72 65 67 69 6f 6e 20 4c 6f 67 20 43 61 6c 6c  #region Log Call
1d890 62 61 63 6b 20 28 47 6c 6f 62 61 6c 29 0d 0a 20  back (Global).. 
1d8a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d8b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 68     // NOTE: We h
1d8c0 61 76 65 20 74 6f 20 62 65 20 63 61 72 65 66 75  ave to be carefu
1d8d0 6c 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74  l here because t
1d8e0 68 65 20 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 0d  he log callback.
1d8f0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1d900 20 20 69 73 20 6e 6f 74 20 70 65 72 2d 63 6f 6e    is not per-con
1d910 6e 65 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6e  nection on the n
1d920 61 74 69 76 65 20 73 69 64 65 2e 20 20 49 74 20  ative side.  It 
1d930 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20  should..        
1d940 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 62 65  //       only be
1d950 20 75 6e 73 65 74 20 62 79 20 74 68 69 73 20 6d   unset by this m
1d960 65 74 68 6f 64 20 69 66 20 74 68 69 73 20 69 6e  ethod if this in
1d970 73 74 61 6e 63 65 20 77 61 73 0d 0a 20 20 20 20  stance was..    
1d980 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 73      //       res
1d990 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 73 65 74  ponsible for set
1d9a0 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20 20 20 20  ting it...      
1d9b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66    //..        if
1d9c0 20 28 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 20   (includeGlobal 
1d9d0 26 26 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61  && _setLogCallba
1d9e0 63 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ck)..        {..
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1da00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1da30 72 63 32 20 3d 20 53 65 74 4c 6f 67 43 61 6c 6c  rc2 = SetLogCall
1da40 62 61 63 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74  back(null); /* t
1da50 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
1da60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
1da70 63 32 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  c2 != SQLiteErro
1da80 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
1da90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
1dac0 69 6c 64 65 72 2c 20 22 63 6f 75 6c 64 20 6e 6f  ilder, "could no
1dad0 74 20 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c  t unset log call
1dae0 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  back");..       
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1db00 3d 20 72 63 32 3b 0d 0a 0d 0a 20 20 20 20 20 20  = rc2;....      
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1db20 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  sult = false;.. 
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1db40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1db50 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1db60 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1db70 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1db80 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1db90 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65  eption e)..#else
1dba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
1dbb0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1dbc0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1dbd0 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
1dbe0 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1dbf0 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1dc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc10 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1dc20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1dc40 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1dc50 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1dc60 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1dc90 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcb0 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74         "Failed t
1dcc0 6f 20 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c  o unset log call
1dcd0 62 61 63 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  back: {0}",..   
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1dd00 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1dd10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1dd20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
1dd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dd50 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1dd60 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1dd70 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
1dd80 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1dd90 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72       AppendError
1dda0 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65  (builder, "faile
1ddb0 64 20 74 6f 20 75 6e 73 65 74 20 6c 6f 67 20 63  d to unset log c
1ddc0 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20  allback");..    
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1dde0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1ddf0 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20  .Error;....     
1de00 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1de10 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  t = false;..    
1de20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1de30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1de40 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1de50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1de60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1deb0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21  ...        if (!
1dec0 72 65 73 75 6c 74 20 26 26 20 63 61 6e 54 68 72  result && canThr
1ded0 6f 77 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow)..           
1dee0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1def0 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 62  eException(rc, b
1df00 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28  uilder.ToString(
1df10 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
1df20 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
1df30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dfa0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1dfb0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
1dfc0 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74  ethod attempts t
1dfd0 6f 20 66 72 65 65 20 74 68 65 20 63 61 63 68 65  o free the cache
1dfe0 64 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  d database name 
1dff0 75 73 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20  used with the.. 
1e000 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
1e010 3d 22 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69  ="SetConfigurati
1e020 6f 6e 4f 70 74 69 6f 6e 22 20 2f 3e 20 6d 65 74  onOption" /> met
1e030 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  hod...    /// </
1e040 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1e050 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1e060 61 6e 54 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f  anThrow">..    /
1e070 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
1e080 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
1e090 69 6e 67 20 65 78 65 63 75 74 65 64 20 77 69 74  ing executed wit
1e0a0 68 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68  hin a context wh
1e0b0 65 72 65 20 69 74 20 63 61 6e 0d 0a 20 20 20 20  ere it can..    
1e0c0 2f 2f 2f 20 74 68 72 6f 77 20 61 6e 20 65 78 63  /// throw an exc
1e0d0 65 70 74 69 6f 6e 20 69 6e 20 74 68 65 20 65 76  eption in the ev
1e0e0 65 6e 74 20 6f 66 20 66 61 69 6c 75 72 65 3b 20  ent of failure; 
1e0f0 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
1e100 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1e110 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
1e120 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
1e130 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
1e140 6d 65 74 68 6f 64 20 77 61 73 20 73 75 63 63 65  method was succe
1e150 73 73 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65  ssful; otherwise
1e160 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  , zero...    ///
1e170 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1e180 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 46 72   private bool Fr
1e190 65 65 44 62 4e 61 6d 65 28 0d 0a 20 20 20 20 20  eeDbName(..     
1e1a0 20 20 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77     bool canThrow
1e1b0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1e1c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
1e1d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e1e0 20 20 20 20 20 20 20 20 69 66 20 28 64 62 4e 61          if (dbNa
1e1f0 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  me != IntPtr.Zer
1e200 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1e210 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e220 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
1e230 46 72 65 65 28 64 62 4e 61 6d 65 29 3b 0d 0a 20  Free(dbName);.. 
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1e250 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  bName = IntPtr.Z
1e260 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
1e270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e280 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1e290 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20  .        }..#if 
1e2a0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1e2b0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1e2c0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74  ION..        cat
1e2d0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1e2e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1e2f0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1e300 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  n)..#endif..    
1e310 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
1e320 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1e330 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1e340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1e380 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1e390 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3b0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
1e3c0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 22 46 61 69 6c 65 64 20 74 6f 20 66 72 65    "Failed to fre
1e3f0 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 3a  e database name:
1e400 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1e410 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1e420 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1e430 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1e440 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1e450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e470 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1e480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1e490 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1e4a0 20 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77      if (canThrow
1e4b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e4c0 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20     throw;..     
1e4d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e4e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1e4f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
1e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e560 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1e570 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
1e580 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
1e590 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
1e5a0 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
1e5b0 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
1e5c0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
1e5d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
1e5e0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
1e5f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
1e600 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
1e610 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1e620 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
1e630 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
1e640 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
1e650 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
1e660 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
1e670 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
1e680 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1e690 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1e6a0 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
1e6b0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
1e6c0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1e6d0 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
1e6e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1e6f0 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
1e700 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
1e710 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
1e720 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1e730 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
1e740 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
1e750 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
1e760 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1e770 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
1e780 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
1e790 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
1e7a0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1e7b0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
1e7c0 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
1e7d0 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
1e7e0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1e7f0 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
1e800 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
1e810 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
1e820 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
1e830 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
1e840 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
1e850 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
1e860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
1e870 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
1e880 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
1e890 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
1e8a0 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
1e8b0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
1e8c0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1e8d0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
1e8e0 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
1e8f0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
1e900 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
1e910 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e920 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1e930 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1e940 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
1e950 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
1e960 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
1e970 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
1e980 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
1e990 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
1e9a0 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
1e9b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1e9c0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
1e9d0 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
1e9f0 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
1ea00 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
1ea10 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
1ea20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
1ea30 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
1ea40 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1ea50 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
1ea60 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
1ea70 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
1ea80 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
1ea90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1eaa0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1eab0 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
1eac0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1ead0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
1eae0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
1eaf0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1eb00 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
1eb10 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
1eb20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1eb30 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
1eb40 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
1eb50 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
1eb60 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
1eb70 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
1eb80 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1eb90 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1eba0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1ebb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ebc0 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
1ebd0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
1ebe0 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
1ebf0 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
1ec00 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
1ec10 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
1ec20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
1ec30 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
1ec40 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
1ec50 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1ec60 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61  eBackupHandle ba
1ec70 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  ckupHandle = nul
1ec80 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  l;....        tr
1ec90 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
1eca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
1ecb0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
1ecc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
1ecd0 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
1ece0 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
1ecf0 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
1ed00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ed10 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
1ed20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
1ed30 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1ed40 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1ed60 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
1ed70 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
1ed80 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
1ed90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eda0 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
1edb0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
1edc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1edd0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1ede0 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c  eErrorCode resul
1edf0 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f  tCode = ResultCo
1ee00 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
1ee10 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
1ee20 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74  ultCode != SQLit
1ee30 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
1ee60 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65  LiteException(re
1ee70 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73  sultCode, GetLas
1ee80 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1eea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eeb0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1eec0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1eed0 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69  "failed to initi
1eee0 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d  alize backup");.
1eef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1ef00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
1ef10 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77  ckupHandle = new
1ef20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
1ef30 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20  dle(destHandle, 
1ef40 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20  backup);..      
1ef50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
1ef60 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ef70 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
1ef80 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
1ef90 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
1efa0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1efb0 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
1efc0 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
1efd0 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
1efe0 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
1eff0 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61  , null, backupHa
1f000 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20  ndle, null, new 
1f010 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
1f020 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
1f030 51 4c 69 74 65 33 29 2c 20 64 65 73 74 43 6e 6e  QLite3), destCnn
1f040 2c 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72  , destName, sour
1f050 63 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20  ceName }));.... 
1f060 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
1f070 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d  w SQLiteBackup(.
1f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1f090 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  s, backupHandle,
1f0a0 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
1f0b0 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
1f0c0 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndle,..         
1f0d0 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b     zSourceName);
1f0e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1f0f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1f100 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20    /// Copies up 
1f110 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20  to N pages from 
1f120 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
1f130 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
1f140 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
1f150 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
1f160 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
1f170 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
1f180 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
1f190 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1f1a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f1b0 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
1f1c0 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65  up object to use
1f1d0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
1f1e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1f1f0 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nPage">..    ///
1f200 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
1f210 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65  ages to copy, ne
1f220 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61  gative to copy a
1f230 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67  ll remaining pag
1f240 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
1f250 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1f260 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
1f270 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74  y">..    /// Set
1f280 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20   to true if the 
1f290 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20  operation needs 
1f2a0 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75  to be retried du
1f2b0 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20  e to database.. 
1f2c0 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69     /// locking i
1f2d0 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65  ssues; otherwise
1f2e0 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d  , set to false..
1f2f0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1f300 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1f310 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  rns>..    /// Tr
1f320 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ue if there are 
1f330 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65  more pages to be
1f340 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f   copied, false o
1f350 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
1f360 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1f370 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1f380 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61  ride bool StepBa
1f390 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
1f3a0 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
1f3b0 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  up,..        int
1f3c0 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20   nPage,..       
1f3d0 20 72 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d   ref bool retry.
1f3e0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1f3f0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79  {..        retry
1f400 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
1f410 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
1f420 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1f430 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1f440 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1f450 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
1f460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1f470 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
1f480 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
1f490 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
1f4a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1f4b0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
1f4c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1f4d0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1f4e0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1f4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f500 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1f510 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1f520 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
1f530 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
1f540 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
1f550 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
1f560 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
1f570 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1f580 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1f590 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1f5a0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
1f5c0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
1f5d0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
1f5e0 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
1f5f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1f600 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
1f610 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1f620 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
1f630 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e  tep(handlePtr, n
1f640 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Page);..        
1f650 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
1f660 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a  lt = n; /* NOTE:
1f670 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79   Save for use by
1f680 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a   FinishBackup. *
1f690 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  /....        if 
1f6a0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
1f6b0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
1f6c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f6d0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1f6e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f6f0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
1f700 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f710 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20  .Busy)..        
1f720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1f730 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
1f740 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f750 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f760 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
1f770 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
1f780 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29  rrorCode.Locked)
1f790 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1f7a0 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
1f7b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f7c0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1f7d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1f7e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
1f7f0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1f800 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20  de.Done)..      
1f810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f820 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1f830 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f840 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1f850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f860 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1f870 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
1f880 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
1f890 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
1f8a0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1f8b0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
1f8c0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1f8d0 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
1f8e0 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
1f8f0 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
1f900 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
1f910 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
1f920 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61  ation database a
1f930 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1f940 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
1f950 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a    /// backup obj
1f960 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
1f970 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1f980 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
1f990 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
1f9a0 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
1f9b0 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
1f9c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
1f9d0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
1f9e0 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
1f9f0 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e   copied.</return
1fa00 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1fa10 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
1fa20 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a  mainingBackup(..
1fa30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1fa40 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
1fa50 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
1fa60 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
1fa70 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
1fa80 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1fa90 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
1faa0 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
1fab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
1fac0 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
1fad0 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
1fae0 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
1faf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1fb00 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
1fb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1fb20 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1fb30 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1fb40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1fb50 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
1fb60 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
1fb70 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
1fb80 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
1fb90 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
1fba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
1fbb0 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
1fbc0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
1fbd0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1fbe0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1fbf0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
1fc10 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
1fc20 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
1fc30 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
1fc40 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1fc50 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1fc60 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
1fc70 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61  kup_remaining(ha
1fc80 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
1fc90 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1fca0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
1fcb0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
1fcc0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
1fcd0 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
1fce0 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
1fcf0 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
1fd00 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
1fd10 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
1fd20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1fd30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1fd40 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
1fd50 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
1fd60 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
1fd70 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1fd80 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20  turns>The total 
1fd90 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
1fda0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
1fdb0 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73  tabase.</returns
1fdc0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1fdd0 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67  override int Pag
1fde0 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20  eCountBackup(.. 
1fdf0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
1fe00 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
1fe10 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
1fe20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
1fe30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1fe40 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1fe50 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
1fe60 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
1fe70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1fe80 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
1fe90 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
1fea0 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
1feb0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
1fec0 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1fee0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1fef0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff10 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1ff20 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1ff30 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
1ff40 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
1ff50 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
1ff60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1ff70 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
1ff80 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
1ff90 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1ffa0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1ffb0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
1ffd0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
1ffe0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1fff0 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
20000 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
20010 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
20020 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
20030 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e  up_pagecount(han
20040 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
20050 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
20060 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
20070 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75  stroys the backu
20080 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e  p object, rollin
20090 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75  g back any backu
200a0 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  p that may be in
200b0 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73  ..    /// proges
200c0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
200d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
200e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
200f0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
20100 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f  object to destro
20110 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
20120 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
20130 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  e void FinishBac
20140 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
20150 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
20160 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
20170 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
20180 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
201a0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
201b0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
201c0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
201d0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
201e0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
201f0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
20200 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
20210 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
20220 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20230 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
20240 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
20250 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
20260 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
20270 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
20280 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
20290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
202a0 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
202b0 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
202c0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
202d0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
202e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
202f0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
20300 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
20310 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
20320 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
20330 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
20340 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
20350 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  .");....#if !SQL
20360 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
20370 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
20380 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
20390 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
203a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
203b0 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ish_interop(hand
203c0 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  lePtr);..#else..
203d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
203e0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
203f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
20400 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
20410 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29  inish(handlePtr)
20420 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
20430 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e     handle.SetHan
20440 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d  dleAsInvalid();.
20450 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e  ...#if COUNT_HAN
20460 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20  DLE..        if 
20470 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
20480 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e  orCode.Ok) || (n
20490 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   == backup._step
204a0 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e  Result)) handle.
204b0 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b  WasReleasedOk();
204c0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
204d0 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51      if ((n != SQ
204e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
204f0 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75  ) && (n != backu
20500 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d  p._stepResult)).
20510 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
20520 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
20530 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
20540 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
20550 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
205c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
205d0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
205e0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
205f0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
20600 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
20610 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
20620 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
20630 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
20640 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
20650 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
20660 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
20670 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
20680 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
20690 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
206a0 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
206b0 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
206c0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
206d0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
206e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
206f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
20700 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c  e bool IsInitial
20710 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
20720 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
20730 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
20740 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  d();..    }.... 
20750 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207b0 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
207c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
207d0 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
207e0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
207f0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
20800 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
20810 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
20820 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
20830 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
20840 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
20850 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
20860 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
20870 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
20880 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
20890 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
208a0 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
208b0 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
208c0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
208d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
208e0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
208f0 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  al static bool S
20900 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
20910 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
20920 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20930 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76   // BUGFIX: Prev
20940 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f  ent races with o
20950 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72  ther threads for
20960 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f   this entire blo
20970 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20  ck, due..       
20980 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74   //         to t
20990 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73  he try/finally s
209a0 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74  emantics.  See t
209b0 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37  icket [72905c9a7
209c0 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  7]...        //.
209d0 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73  .        lock (s
209e0 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
209f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20a00 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
20a10 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74   // NOTE: Save t
20a20 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
20a30 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e  logging class an
20a40 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69  d then restore i
20a50 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
20a60 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65  /       after we
20a70 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f   are done to avo
20a80 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d  id logging too m
20a90 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73  any false errors
20aa0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20ab0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  /..            b
20ac0 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64  ool savedEnabled
20ad0 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61   = SQLiteLog.Ena
20ae0 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  bled;..         
20af0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
20b00 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  bled = false;...
20b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
20b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b40 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
20b50 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
20b60 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73  is method [ab]us
20b70 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74  es the fact that
20b80 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77   SQLite will alw
20b90 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ays..           
20ba0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
20bb0 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
20bc0 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77  R for any unknow
20bd0 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n configuration 
20be0 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
20bf0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20c00 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51   *unless* the SQ
20c10 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73  Lite library has
20c20 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
20c30 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20  itialized...    
20c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20c50 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73       In that cas
20c60 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73  e it will always
20c70 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
20c80 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20  ISUSE...        
20c90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
20cb0 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
20cc0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
20cd0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
20ce0 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20  fig_none(..     
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
20d00 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
20d10 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
20d20 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20  _NONE);....     
20d30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20d40 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  n (rc == SQLiteE
20d50 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29  rrorCode.Misuse)
20d60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
20d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
20d80 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
20d90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20da0 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
20db0 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45  Enabled = savedE
20dc0 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
20dd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20de0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
20df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20e50 0a 0d 0a 23 69 66 20 55 53 45 5f 49 4e 54 45 52  ...#if USE_INTER
20e60 4f 50 5f 44 4c 4c 20 26 26 20 49 4e 54 45 52 4f  OP_DLL && INTERO
20e70 50 5f 4c 4f 47 0d 0a 20 20 20 20 69 6e 74 65 72  P_LOG..    inter
20e80 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
20e90 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 66 69  eErrorCode Confi
20ea0 67 75 72 65 4c 6f 67 46 6f 72 49 6e 74 65 72 6f  gureLogForIntero
20eb0 70 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  p(..        stri
20ec0 6e 67 20 63 6c 61 73 73 4e 61 6d 65 0d 0a 20 20  ng className..  
20ed0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
20ee0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
20ef0 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
20f00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
20f10 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
20f20 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29 3b 0d 0a  log_interop();..
20f30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 63  ..        if (rc
20f40 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
20f50 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
20f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20f70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
20f80 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ods.sqlite3_log(
20f90 72 63 2c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  rc, SQLiteConver
20fa0 74 2e 54 6f 55 54 46 38 28 0d 0a 20 20 20 20 20  t.ToUTF8(..     
20fb0 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70 65             Helpe
20fc0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
20fd0 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
20fe0 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
20ff0 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
21000 20 20 20 20 20 20 20 20 20 22 6c 6f 67 67 69 6e           "loggin
21010 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 76 69  g initialized vi
21020 61 20 5c 22 7b 30 7d 5c 22 2e 22 2c 20 63 6c 61  a \"{0}\".", cla
21030 73 73 4e 61 6d 65 29 29 29 3b 0d 0a 20 20 20 20  ssName)));..    
21040 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
21050 6c 73 65 20 69 66 20 28 72 63 20 3d 3d 20 53 51  lse if (rc == SQ
21060 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
21070 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ne)..        {..
21080 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
21090 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
210a0 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .Ok;..        }.
210b0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
210c0 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  n rc;..    }..#e
210d0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
210e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21140 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
21150 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
21160 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
21170 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
21180 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
21190 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
211a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
211b0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
211c0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
211d0 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
211e0 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
211f0 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
21200 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
21210 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
21220 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
21230 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74  with the connect
21240 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
21250 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21260 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
21270 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
21280 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
21290 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
212a0 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
212b0 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
212c0 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
212d0 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
212e0 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
212f0 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
21300 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
21310 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
21320 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
21330 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
21340 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
21350 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
21360 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
21370 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
21380 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
21390 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
213a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
213b0 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
213c0 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
213d0 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
213e0 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
213f0 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69  aff = typ.Affini
21400 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61  ty;..      if (a
21410 66 66 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ff == TypeAffini
21420 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20  ty.Null) return 
21430 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
21440 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75       Type t = nu
21450 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ll;....      if 
21460 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54  (typ.Type != DbT
21470 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20  ype.Object)..   
21480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20     {..        t 
21490 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
214a0 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
214b0 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
214c0 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69  aff = TypeToAffi
214d0 6e 69 74 79 28 74 2c 20 66 6c 61 67 73 29 3b 0d  nity(t, flags);.
214e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
214f0 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
21500 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
21510 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78  lags.GetAllAsTex
21520 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  t) == SQLiteConn
21530 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
21540 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20  llAsText)..     
21550 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
21560 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
21570 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
21580 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b  h (aff)..      {
21590 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
215a0 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
215b0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
215c0 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
215d0 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e  ype.Guid && typ.
215e0 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
215f0 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a  Affinity.Text)..
21600 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21610 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54  rn new Guid(GetT
21620 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
21630 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21640 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74  int n = (int)Get
21650 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
21660 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30  x, 0, null, 0, 0
21670 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79  );..          by
21680 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74  te[] b = new byt
21690 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[n];..         
216a0 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20   GetBytes(stmt, 
216b0 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20  index, 0, b, 0, 
216c0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
216d0 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
216e0 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
216f0 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20  n == 16)..      
21700 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
21710 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20   Guid(b);....   
21720 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b         return b;
21730 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
21740 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
21750 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  Time:..         
21760 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54   return GetDateT
21770 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ime(stmt, index)
21780 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
21790 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
217a0 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ble:..          
217b0 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
217c0 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28  eturn GetDouble(
217d0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
217e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
217f0 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
21800 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  pe(GetDouble(stm
21810 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
21820 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ll);..        ca
21830 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
21840 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
21850 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29    if (t == null)
21860 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34   return GetInt64
21870 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
21880 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
21890 3d 3d 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  == typeof(Boolea
218a0 6e 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 6f  n)) return GetBo
218b0 6f 6c 65 61 6e 28 73 74 6d 74 2c 20 69 6e 64 65  olean(stmt, inde
218c0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
218d0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53  f (t == typeof(S
218e0 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
218f0 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  tSByte(stmt, ind
21900 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
21910 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
21920 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
21930 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  tByte(stmt, inde
21940 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
21950 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
21960 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
21970 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  tInt16(stmt, ind
21980 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
21990 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
219a0 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  UInt16)) return 
219b0 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
219c0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
219d0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
219e0 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72  of(Int32)) retur
219f0 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  n GetInt32(stmt,
21a00 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
21a10 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
21a20 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74  eof(UInt32)) ret
21a30 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74  urn GetUInt32(st
21a40 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
21a50 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
21a60 74 79 70 65 6f 66 28 49 6e 74 36 34 29 29 20 72  typeof(Int64)) r
21a70 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
21a80 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
21a90 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
21aa0 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29   typeof(UInt64))
21ab0 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36   return GetUInt6
21ac0 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
21ad0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
21ae0 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
21af0 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
21b00 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
21b10 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
21b20 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
21b30 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
21b40 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
21b50 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
21b60 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
21b70 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
21b80 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
21b90 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
21ba0 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
21bb0 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
21bc0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
21bd0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
21be0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
21bf0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
21c00 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69  3_table_cursor_i
21c10 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
21c20 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f  ite_stmt, db, ro
21c30 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d  otPage);..#else.
21c40 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
21c50 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
21c60 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
21c70 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
21c80 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72  etRowIdForCursor
21c90 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
21ca0 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f   stmt, int curso
21cb0 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
21cc0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
21cd0 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69  .      long rowi
21ce0 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  d = 0;..      SQ
21cf0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
21d00 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
21d10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
21d20 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65  ursor_rowid_inte
21d30 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
21d40 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72  _stmt, cursor, r
21d50 65 66 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20  ef rowid);..    
21d60 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
21d70 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
21d80 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d  return rowid;...
21d90 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
21da0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
21db0 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
21dc0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
21dd0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
21de0 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f   void GetIndexCo
21df0 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f  lumnExtendedInfo
21e00 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65  (string database
21e10 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20  , string index, 
21e20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72  string column, r
21e30 65 66 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c  ef int sortMode,
21e40 20 72 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72   ref int onError
21e50 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
21e60 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d  lationSequence).
21e70 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
21e80 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
21e90 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20      IntPtr coll 
21ea0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
21eb0 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
21ec0 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
21ed0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
21ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
21ef0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
21f00 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
21f10 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
21f20 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
21f30 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
21f40 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
21f50 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66  TF8(column), ref
21f60 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f   sortMode, ref o
21f70 6e 45 72 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c  nError, ref coll
21f80 2c 20 72 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , ref colllen);.
21f90 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
21fa0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21fb0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
21fc0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
21fd0 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  c, null);....   
21fe0 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
21ff0 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
22000 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
22010 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
22020 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
22030 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
22040 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
22050 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
22060 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
22070 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
22080 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
22090 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
220a0 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
220b0 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
220c0 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
220d0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
220e0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
220f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
22100 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
22110 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21  _sql, (zDbName !
22120 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38  = null) ? ToUTF8
22130 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c  (zDbName) : null
22140 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20  , op, pArg);..  
22150 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..