System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 66b23e80008eac1f85cca517762b9a4babdcdf82:


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 31 32 2e 30  ion = "1.0.112.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 48 65 6c  dFunctions = Hel
25a0: 70 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c  perMethods.HasFl
25b0: 61 67 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69  ags(_flags, SQLi
25c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
25d0: 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  s.UnbindFunction
25e0: 73 4f 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20  sOnClose);....  
25f0: 20 20 20 20 72 65 74 72 79 3a 0d 0a 0d 0a 20 20      retry:....  
2600: 20 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65          if (_use
2610: 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  Pool)..         
2620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2630: 20 20 69 66 20 28 53 51 4c 69 74 65 42 61 73 65    if (SQLiteBase
2640: 2e 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  .ResetConnection
2650: 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20 21 64 69  (_sql, _sql, !di
2660: 73 70 6f 73 69 6e 67 29 20 26 26 0d 0a 20 20 20  sposing) &&..   
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
2680: 6e 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62  nhookNativeCallb
2690: 61 63 6b 73 28 74 72 75 65 2c 20 21 64 69 73 70  acks(true, !disp
26a0: 6f 73 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  osing))..       
26b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26d0: 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29  unbindFunctions)
26e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2710: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  (SQLiteFunction.
2720: 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f  UnbindAllFunctio
2730: 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c  ns(this, _flags,
2740: 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
2770: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2780: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
27b0: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
27c0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
27d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
2800: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
2830: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f  indFunctions (Po
2840: 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d  ol) Success: {0}
2850: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2880: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
28c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
28d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
28e0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
28f0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2900: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2930: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2940: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2970: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2980: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e        "UnbindFun
29b0: 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61  ctions (Pool) Fa
29c0: 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ilure: {0}",..  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
29f0: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2a00: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a30: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
2a40: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
2a50: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
2a60: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
2a70: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
2a80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a90: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2aa0: 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66  ctionPool.Add(_f
2ab0: 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f  ileName, _sql, _
2ac0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2af0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
2b00: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
2b10: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2b40: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c  tionEventType.Cl
2b50: 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c  osedToPool, null
2b60: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2b80: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
2b90: 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20   _fileName, new 
2ba0: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33    typeof(SQLite3
2bd0: 29 2c 20 21 64 69 73 70 6f 73 69 6e 67 2c 20 5f  ), !disposing, _
2be0: 66 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56  fileName, _poolV
2bf0: 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23  ersion }));....#
2c00: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2c10: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2c20: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
2c30: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
2c40: 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
2c50: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
2c60: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
2c80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
2c90: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75  "Close (Pool) Su
2cc0: 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ccess: {0}",..  
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
2cf0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
2d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d20: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d30: 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
2d40: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
2d50: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d70: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
2d80: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
2d90: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
2dc0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de0: 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28          "Close (
2df0: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
2e00: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
2e20: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2e30: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2e70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e   connection cann
2e80: 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 74  ot be added to t
2e90: 68 65 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20  he pool;..      
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2eb0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore, 
2ec0: 6a 75 73 74 20 75 73 65 20 74 68 65 20 6e 6f 72  just use the nor
2ed0: 6d 61 6c 20 64 69 73 70 6f 73 61 6c 0d 0a 20 20  mal disposal..  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef0: 2f 2f 20 20 20 20 20 20 20 70 72 6f 63 65 64 75  //       procedu
2f00: 72 65 20 6f 6e 20 69 74 2e 0d 0a 20 20 20 20 20  re on it...     
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f30: 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
2f40: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f50: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 72 65 74          goto ret
2f60: 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
2f70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
2f90: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2fb0: 20 49 47 4e 4f 52 45 44 20 2a 2f 0d 0a 20 20 20   IGNORED */..   
2fc0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 68 6f 6f             Unhoo
2fd0: 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63 6b 73  kNativeCallbacks
2fe0: 28 64 69 73 70 6f 73 69 6e 67 2c 20 21 64 69 73  (disposing, !dis
2ff0: 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
3000: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
3010: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3040: 20 20 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e     if (SQLiteFun
3050: 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46  ction.UnbindAllF
3060: 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f  unctions(this, _
3070: 66 6c 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a  flags, false))..
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3090: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
30a0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
30b0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
30e0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
30f0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
3100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3110: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
3120: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
3130: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3150: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
3160: 6e 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22  ns Success: {0}"
3170: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
3190: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
31a0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
31e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
31f0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
3200: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
3210: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
3220: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
3230: 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
3240: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
3250: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3270: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
3280: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a0: 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64           "Unbind
32b0: 46 75 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72  Functions Failur
32c0: 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {0}",..      
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
32f0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
3300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3310: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3320: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3330: 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70         _sql.Disp
3340: 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ose();....      
3350: 20 20 20 20 20 20 20 20 46 72 65 65 44 62 4e 61          FreeDbNa
3360: 6d 65 28 21 64 69 73 70 6f 73 69 6e 67 29 3b 0d  me(!disposing);.
3370: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
3380: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
3390: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ull;..      }.. 
33a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 23  ///////////....#
3410: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
3420: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
3430: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74  ECTION..    prot
3440: 65 63 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e  ected string Han
3450: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  dleToString().. 
3460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
3470: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
3480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3490: 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d  urn "<null>";...
34a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
34b0: 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b  _sql.ToString();
34c0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
34d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3540: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3550: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
3560: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
3570: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
3580: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
3590: 64 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  d has been..    
35a0: 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20  /// called...   
35b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
35c0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
35d0: 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28   GetCancelCount(
35e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
35f0: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
3600: 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68  cked.CompareExch
3610: 61 6e 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c  ange(ref _cancel
3620: 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20  Count, 0, 0);.. 
3630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
36a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
36b0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
36c0: 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73  ethod determines
36d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
36e0: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  a <see cref="SQL
36f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  iteException" />
3700: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61  ..    /// with a
3710: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
3720: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3730: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
3740: 72 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d  rupt" /> should.
3750: 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f  .    /// be thro
3760: 77 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20  wn after making 
3770: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
3780: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
3790: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
37a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
37b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
37c0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
37d0: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
37e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f  LiteException" /
37f0: 3e 20 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20  > to be thrown. 
3800: 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20   This method..  
3810: 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20    /// will only 
3820: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero 
3830: 69 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  if the <see cref
3840: 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74  ="Cancel" /> met
3850: 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a  hod was called..
3860: 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d      /// one or m
3870: 6f 72 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ore times during
3880: 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
3890: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
38a0: 72 61 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d  rary (e.g. when.
38b0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
38c0: 69 74 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20  ite3_prepare*() 
38d0: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  or sqlite3_step(
38e0: 29 20 41 50 49 73 20 61 72 65 20 75 73 65 64 29  ) APIs are used)
38f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3900: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
3910: 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68  te bool ShouldTh
3920: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a  rowForCancel()..
3930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3940: 65 74 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43  eturn GetCancelC
3950: 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20  ount() > 0;..   
3960: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
3970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
39d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
39e0: 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74      /// Resets t
39f0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
3a00: 3c 73 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63  <see cref="_canc
3a10: 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c  elCount" /> fiel
3a20: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
3a30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
3a40: 61 74 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e  ate int ResetCan
3a50: 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20  celCount()..    
3a60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3a70: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f  n Interlocked.Co
3a80: 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28 72 65  mpareExchange(re
3a90: 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20  f _cancelCount, 
3aa0: 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29  0, _cancelCount)
3ab0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
3b20: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3b30: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
3b40: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
3b50: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
3b60: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
3b70: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
3b80: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
3b90: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
3ba0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
3bb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3bc0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3bd0: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
3be0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3bf0: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
3c00: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
3c10: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ing...      }.. 
3c20: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
3c30: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
3c40: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
3c50: 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   */..      {..  
3c60: 20 20 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65        Interlocke
3c70: 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20  d.Increment(ref 
3c80: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
3c90: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
3ca0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3cb0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
3cc0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
3cd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3ce0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3cf0: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3d00: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3d10: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3d20: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3d30: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3d40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3d50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3d60: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
3d70: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
3d80: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
3d90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
3da0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
3db0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
3dc0: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3dd0: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3de0: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3df0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3e00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3e10: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3e20: 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  on">..    /// Th
3e30: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
3e40: 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f  iteFunction"/> o
3e50: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
3e60: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
3e70: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  he..    /// func
3e80: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3e90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3ea0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3eb0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
3ec0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
3ed0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
3ee0: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
3ef0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
3f00: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
3f10: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
3f20: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3f30: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
3f40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3f50: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3f60: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3f70: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
3f80: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
3f90: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
3fa0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3fb0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
3fc0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
3fd0: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
3fe0: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
3ff0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4000: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
4010: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
4020: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
4030: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
4040: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d    if (function =
4050: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4060: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
4070: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
4080: 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29  tion("function")
4090: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
40a0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
40b0: 46 75 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66  Function(this, f
40c0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
40d0: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
40e0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  s);....        i
40f0: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
4100: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4110: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
4120: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
4130: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
4140: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
4150: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
4160: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
4170: 73 5b 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  s[functionAttrib
4180: 75 74 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b  ute] = function;
4190: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
41a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
41b0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
41c0: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
41d0: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
41e0: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
41f0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
4200: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4210: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
4220: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4230: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
4240: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
4250: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
4260: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
4270: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
4280: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
4290: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
42a0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e  unction to be un
42b0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
42c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
42d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
42e0: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
42f0: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
4300: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
4310: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
4320: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
4330: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
4340: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
4350: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63  zero if the func
4360: 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64  tion was unbound
4370: 20 61 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72   and removed.</r
4380: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
4390: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
43a0: 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69  ool UnbindFuncti
43b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
43c0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
43d0: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
43e0: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
43f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4400: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
4410: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
4420: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
4430: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
4440: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4450: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
4460: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
4470: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74  ion("functionAtt
4480: 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20  ribute");....   
4490: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
44a0: 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
44b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
44c0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
44d0: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
44e0: 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  n function;.... 
44f0: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
4500: 74 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  tions.TryGetValu
4510: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4520: 75 74 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f  ute, out functio
4530: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n))..        {..
4540: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4550: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
4560: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  nbindFunction(..
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4580: 20 20 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69      this, functi
4590: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
45a0: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26  ction, flags) &&
45b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45c0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d    _functions.Rem
45d0: 6f 76 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  ove(functionAttr
45e0: 69 62 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20  ibute))..       
45f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
4610: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
4620: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4640: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
4650: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4660: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56  verride string V
4670: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
4680: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4690: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
46a0: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  n SQLiteVersion;
46b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
46c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
46d0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
46e0: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
46f0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
4700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4710: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
4720: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
4730: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4740: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4750: 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65  ic string Define
4760: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b  Constants..    {
4770: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
4780: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4790: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
47a0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
47b0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
47c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
47d0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73  List<string> lis
47e0: 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65  t = SQLiteDefine
47f0: 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e  Constants.Option
4800: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
4810: 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d       if (list !=
4820: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4840: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4850: 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69  string element i
4860: 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  n list)..       
4870: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
48a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
48c0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
48e0: 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
48f0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4910: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4920: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4930: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4940: 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29  .Append(element)
4950: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4970: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4980: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
4990: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
49a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
49b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
49c0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
49d0: 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  iteVersion..    
49e0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
49f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4a00: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4a10: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4a20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
4a30: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4a40: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4a50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4a60: 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  l static int SQL
4a70: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
4a80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4a90: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
4aa0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
4ab0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4ac0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
4ad0: 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20  on_number();..  
4ae0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4af0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4b00: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4b10: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  eSourceId..    {
4b20: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4b40: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4b50: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4b60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f  thods.sqlite3_so
4b70: 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a  urceid(), -1);..
4b80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4b90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4ba0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
4bb0: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
4bc0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4bd0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
4bf0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
4c00: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
4c10: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
4c20: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
4c30: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
4c40: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
4c50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4c60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
4c70: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
4c80: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
4c90: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
4ca0: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
4cb0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
4cc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4cd0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
4ce0: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4d10: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4d20: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
4d30: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
4d40: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
4d50: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4d60: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
4d70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4d80: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
4d90: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
4da0: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
4db0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4dc0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
4dd0: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
4de0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4df0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4e00: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
4e10: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..  
4e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4e30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4e40: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4e50: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
4e60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4e70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4e80: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c  ethods.interop_l
4e90: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4ea0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4eb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
4ec0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
4ed0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4ee0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4ef0: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4f00: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..    
4f10: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4f20: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4f30: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4f50: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4f60: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4f70: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75  hods.interop_sou
4f80: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23  rceid(), -1);..#
4f90: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4fa0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4fb0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4fc0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4fd0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4fe0: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f  string InteropCo
4ff0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
5000: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5010: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
5020: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5030: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  D..            S
5040: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
5050: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
5060: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
5070: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
5080: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
5090: 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75      IntPtr zValu
50a0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
50b0: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
50c0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
50d0: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20  t(index++);.... 
50e0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
50f0: 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (zValue != IntP
5100: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
5110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5120: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
5130: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
5140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5150: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
5160: 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  nd(' ');....    
5170: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5180: 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f  lt.Append(UTF8To
5190: 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d  String(zValue, -
51a0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
51b0: 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55        zValue = U
51c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
51d0: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
51e0: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
51f0: 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20  ex++);..        
5200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5210: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
5220: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
5230: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5240: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
5250: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5260: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5270: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5280: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
5290: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
52a0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
52b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
52c0: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c  Autocommit(_sql,
52d0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   _sql);..      }
52e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
52f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5300: 20 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79   bool IsReadOnly
5310: 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  (..        strin
5320: 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  g name..        
5330: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5340: 20 20 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65    IntPtr pDbName
5350: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
5360: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
5370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5380: 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20         if (name 
5390: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
53a0: 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d            pDbNam
53b0: 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  e = SQLiteString
53c0: 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
53d0: 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a  tring(name);....
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
53f0: 72 65 73 75 6c 74 20 3d 20 55 6e 73 61 66 65 4e  result = UnsafeN
5400: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5410: 69 74 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79  ite3_db_readonly
5420: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5430: 20 20 20 5f 73 71 6c 2c 20 70 44 62 4e 61 6d 65     _sql, pDbName
5440: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5450: 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20    if (result == 
5460: 2d 31 29 20 2f 2a 20 64 61 74 61 62 61 73 65 20  -1) /* database 
5470: 6e 6f 74 20 66 6f 75 6e 64 20 2a 2f 0d 0a 20 20  not found */..  
5480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
54a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
54b0: 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74  eption(HelperMet
54c0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
54d0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
54e0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
54f0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
5500: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
5510: 20 20 20 20 20 20 20 20 20 22 64 61 74 61 62 61           "databa
5520: 73 65 20 5c 22 7b 30 7d 5c 22 20 6e 6f 74 20 66  se \"{0}\" not f
5530: 6f 75 6e 64 22 2c 20 6e 61 6d 65 29 29 3b 0d 0a  ound", name));..
5540: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5560: 75 72 6e 20 72 65 73 75 6c 74 20 3d 3d 20 30 20  urn result == 0 
5570: 3f 20 66 61 6c 73 65 20 3a 20 74 72 75 65 3b 0d  ? false : true;.
5580: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5590: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
55a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
55b0: 20 20 20 20 69 66 20 28 70 44 62 4e 61 6d 65 20      if (pDbName 
55c0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
55d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55f0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
5600: 65 28 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20  e(pDbName);..   
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
5620: 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
5630: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
5640: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5650: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5660: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
5670: 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  ng LastInsertRow
5680: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
5690: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
56a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
56b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
56c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
56d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
56e0: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
56f0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c  nsert_rowid(_sql
5700: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
5710: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5720: 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d      long rowId =
5730: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73   0;..        Uns
5740: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5750: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
5760: 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72  sert_rowid_inter
5770: 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77  op(_sql, ref row
5780: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  Id);..        re
5790: 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c  turn rowId;..#el
57a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
57b0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
57c0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
57d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
57e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
57f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5800: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
5810: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
5820: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  .      {..#if !S
5830: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
5850: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5860: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
5870: 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29  es_interop(_sql)
5880: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5890: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
58a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
58b0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
58c0: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
58d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
58e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
58f0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
5900: 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Used..    {..   
5910: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
5920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5930: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65   return StaticMe
5940: 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20  moryUsed;..     
5950: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5960: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
5970: 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65  ic long StaticMe
5980: 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d  moryUsed..    {.
5990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
59a0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
59b0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
59c0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
59d0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
59e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
59f0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
5a00: 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53  sed();..#elif !S
5a10: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
5a30: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
5a40: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
5a50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5a60: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
5a70: 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74  _interop(ref byt
5a80: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
5a90: 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d    return bytes;.
5aa0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5ab0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
5ac0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
5ad0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
5ae0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5af0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5b00: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
5b10: 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72   MemoryHighwater
5b20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5b30: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5b50: 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79  urn StaticMemory
5b60: 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20  Highwater;..    
5b70: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5b80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5b90: 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d  tic long StaticM
5ba0: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
5bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5bc0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
5bd0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5be0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
5bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5c00: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5c10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
5c20: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30  mory_highwater(0
5c30: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
5c40: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5c50: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74          long byt
5c60: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  es = 0;..       
5c70: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
5c80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5c90: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
5ca0: 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66  r_interop(0, ref
5cb0: 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20   bytes);..      
5cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
5cd0: 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  es;..#else..    
5ce0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5cf0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
5d00: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
5d10: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
5d20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5d30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5d40: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e   /// Returns non
5d50: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64  -zero if the und
5d60: 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63  erlying native c
5d70: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5d80: 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f   is owned..    /
5d90: 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61  // by this insta
5da0: 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
5db0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
5dc0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5dd0: 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a  bool OwnHandle..
5de0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5df0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
5e00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
5e10: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5e30: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
5e40: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
5e50: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
5e60: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20  ailable");....  
5e70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5e80: 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b   _sql.OwnHandle;
5e90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5ea0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5eb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5ec0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67   Returns the log
5ed0: 69 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e  ical list of fun
5ee0: 63 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65  ctions associate
5ef0: 64 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e  d with this conn
5f00: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
5f10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5f20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5f30: 64 65 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53  de IDictionary<S
5f40: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
5f50: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
5f60: 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e  nction> Function
5f70: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
5f80: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
5f90: 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20  functions; }..  
5fa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5fb0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
5fc0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
5fd0: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
5fe0: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
5ff0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6000: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
6010: 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20  tatus(value);.. 
6020: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6030: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
6040: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
6050: 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  icSetMemoryStatu
6060: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
6070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6080: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
6090: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
60a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
60b0: 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20  onfig_int(..    
60c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
60d0: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
60e0: 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
60f0: 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a  TUS, value ? 1 :
6100: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
6110: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
6120: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6130: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6140: 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  Attempts to free
6150: 20 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65   as much heap me
6160: 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65  mory as possible
6170: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
6180: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
6190: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
61a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
61b0: 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53  rns>A standard S
61c0: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
61d0: 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72  e (i.e. zero for
61e0: 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e   success and non
61f0: 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72  -zero for failur
6200: 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  e).</returns>.. 
6210: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6220: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
6230: 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f  Code ReleaseMemo
6240: 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ry()..    {..   
6250: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6260: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
6270: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6280: 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
6290: 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a  _memory(_sql);..
62a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
62b0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
62c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
62d0: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
62e0: 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73   to free N bytes
62f0: 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20   of heap memory 
6300: 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  by deallocating 
6310: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
6320: 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c  mory..    /// al
6330: 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62  locations held b
6340: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c  y the database l
6350: 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75  ibrary. Memory u
6360: 73 65 64 20 74 6f 20 63 61 63 68 65 20 64 61 74  sed to cache dat
6370: 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20  abase pages..   
6380: 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20   /// to improve 
6390: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61  performance is a
63a0: 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e  n example of non
63b0: 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72  -essential memor
63c0: 79 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f  y.  This is a no
63d0: 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74  -op..    /// ret
63e0: 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74  urning zero if t
63f0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
6400: 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63  ibrary was not c
6410: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
6420: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20   compile-time.. 
6430: 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51     /// option SQ
6440: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
6450: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20  RY_MANAGEMENT.  
6460: 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65  Optionally, atte
6470: 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e  mpts to reset an
6480: 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  d/or..    /// co
6490: 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33 32 20  mpact the Win32 
64a0: 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69 66 20  native heap, if 
64b0: 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20  applicable...   
64c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
64d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
64e0: 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a  name="nBytes">..
64f0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75      /// The requ
6500: 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ested number of 
6510: 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a  bytes to free...
6520: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6530: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6540: 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a   name="reset">..
6550: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
6560: 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65   to attempt a he
6570: 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f  ap reset...    /
6580: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6590: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
65a0: 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20  ="compact">..   
65b0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
65c0: 20 61 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f   attempt heap co
65d0: 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  mpaction...    /
65e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
65f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6600: 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f  ="nFree">..    /
6610: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
6620: 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20   bytes actually 
6630: 66 72 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c  freed.  This val
6640: 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d  ue may be zero..
6650: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
6660: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6670: 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22  m name="resetOk"
6680: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
6690: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f  value will be no
66a0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65  n-zero if the he
66b0: 61 70 20 72 65 73 65 74 20 77 61 73 20 73 75 63  ap reset was suc
66c0: 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f  cessful...    //
66d0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
66e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
66f0: 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20  "nLargest">..   
6700: 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66   /// The size of
6710: 20 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d   the largest com
6720: 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63  mitted free bloc
6730: 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69  k in the heap, i
6740: 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f  n bytes...    //
6750: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c  / This value wil
6760: 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73  l be zero unless
6770: 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e   heap compaction
6780: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20   is enabled...  
6790: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
67a0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
67b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
67c0: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
67d0: 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a  urn code (i.e. z
67e0: 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20  ero for success 
67f0: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20  and non-zero..  
6800: 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72    /// for failur
6810: 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  e)...    /// </r
6820: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
6830: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c  ernal static SQL
6840: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61  iteErrorCode Sta
6850: 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  ticReleaseMemory
6860: 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  (..        int n
6870: 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  Bytes,..        
6880: 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20  bool reset,..   
6890: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63       bool compac
68a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  t,..        ref 
68b0: 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20  int nFree,..    
68c0: 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73      ref bool res
68d0: 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72  etOk,..        r
68e0: 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74  ef uint nLargest
68f0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
6900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
6910: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
6920: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6930: 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .Ok;....        
6940: 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d  int nFreeLocal =
6950: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6960: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c  hods.sqlite3_rel
6970: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74  ease_memory(nByt
6980: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69  es);..        ui
6990: 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  nt nLargestLocal
69a0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62   = 0;..        b
69b0: 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c  ool resetOkLocal
69c0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
69d0: 20 21 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f   !DEBUG && WINDO
69e0: 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75  WS // NOTE: Shou
69f0: 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45 41 50  ld be "WIN32HEAP
6a00: 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26   && !MEMDEBUG &&
6a10: 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20   WINDOWS"..     
6a20: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
6a30: 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29  hods.IsWindows()
6a40: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6a50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 72            if ((r
6a60: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6a70: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65  Code.Ok) && rese
6a80: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
6a90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6aa0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
6ab0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6ac0: 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f  te3_win32_reset_
6ad0: 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  heap();....     
6ae0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
6af0: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6b00: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6b20: 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75  setOkLocal = tru
6b30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6b40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6b50: 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69   if ((rc == SQLi
6b60: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6b70: 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20  && compact)..   
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
6b90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6ba0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
6bb0: 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70  n32_compact_heap
6bc0: 28 72 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63  (ref nLargestLoc
6bd0: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  al);..        }.
6be0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23  .        else..#
6bf0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
6c00: 66 20 28 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70  f (reset || comp
6c10: 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  act)..        {.
6c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
6c30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6c40: 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 20 20 20  e.NotFound;..   
6c50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6c60: 20 20 6e 46 72 65 65 20 3d 20 6e 46 72 65 65 4c    nFree = nFreeL
6c70: 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e  ocal;..        n
6c80: 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61 72 67 65  Largest = nLarge
6c90: 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20  stLocal;..      
6ca0: 20 20 72 65 73 65 74 4f 6b 20 3d 20 72 65 73 65    resetOk = rese
6cb0: 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20  tOkLocal;....   
6cc0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
6cd0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6ce0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6cf0: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
6d00: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
6d10: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
6d20: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
6d30: 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20   different..    
6d40: 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  /// configuratio
6d50: 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64  n options.  We d
6d60: 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e  epend on auto in
6d70: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20  itialization to 
6d80: 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f  recover...    //
6d90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6da0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
6db0: 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72  eturns a standar
6dc0: 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20  d SQLite result 
6dd0: 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  code.</returns>.
6de0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6df0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
6e00: 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77 6e 28  orCode Shutdown(
6e10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6e20: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53    return StaticS
6e30: 68 75 74 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d  hutdown(false);.
6e40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6e50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6e60: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
6e70: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
6e80: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
6e90: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
6ea0: 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20   different..    
6eb0: 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  /// configuratio
6ec0: 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64  n options.  We d
6ed0: 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e  epend on auto in
6ee0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20  itialization to 
6ef0: 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f  recover...    //
6f00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6f10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6f20: 65 3d 22 64 69 72 65 63 74 6f 72 69 65 73 22 3e  e="directories">
6f30: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
6f40: 72 6f 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  ro to reset the 
6f50: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
6f60: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
6f70: 65 73 20 74 6f 20 74 68 65 69 72 0d 0a 20 20 20  es to their..   
6f80: 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20 76 61 6c   /// default val
6f90: 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
6fa0: 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
6fb0: 74 68 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65  th.  This parame
6fc0: 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20  ter has no..    
6fd0: 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f  /// effect on no
6fe0: 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65 72 61 74  n-Windows operat
6ff0: 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20  ing systems...  
7000: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7010: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7020: 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64  >Returns a stand
7030: 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c  ard SQLite resul
7040: 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73  t code.</returns
7050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
7060: 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
7070: 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53 68 75  orCode StaticShu
7080: 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20 20 20 20  tdown(..        
7090: 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72 69 65 73  bool directories
70a0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
70b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
70c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
70d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
70e0: 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .Ok;....        
70f0: 69 66 20 28 64 69 72 65 63 74 6f 72 69 65 73 29  if (directories)
7100: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
7110: 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20   WINDOWS..      
7120: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
7130: 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
7140: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
7150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7160: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
7170: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7180: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
7190: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
71a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
71b0: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73  .sqlite3_win32_s
71c0: 65 74 5f 64 69 72 65 63 74 6f 72 79 28 31 2c 20  et_directory(1, 
71d0: 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
71e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
71f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7200: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
7220: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7230: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
7240: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
7250: 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  y(2, null);..   
7260: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7270: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65          else..#e
7280: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7290: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
72a0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
72b0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
72d0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a  ace.WriteLine(..
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72f0: 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43      "Shutdown: C
7300: 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65  annot reset dire
7310: 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20  ctories on this 
7320: 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65  platform.");..#e
7330: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7340: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
7350: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 63  ..        if (rc
7360: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7370: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7380: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
7390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
73a0: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29  lite3_shutdown()
73b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
73c0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
73d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
73e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
73f0: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61  ermines if the a
7400: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
7410: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
7420: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
7430: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7440: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7450: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
7460: 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f  zero if the asso
7470: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
7480: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
7490: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
74a0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
74b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
74c0: 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28  ide bool IsOpen(
74d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
74e0: 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21    return (_sql !
74f0: 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c  = null) && !_sql
7500: 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f  .IsInvalid && !_
7510: 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20  sql.IsClosed;.. 
7520: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
7530: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7540: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 66  // Returns the f
7550: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
7560: 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d  ath and file nam
7570: 65 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  e for the curren
7580: 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20 20 2f 2f  tly open..    //
7590: 2f 20 64 61 74 61 62 61 73 65 2c 20 69 66 20 61  / database, if a
75a0: 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ny...    /// </s
75b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
75c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62   <param name="db
75d0: 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
75e0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
75f0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7600: 65 20 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20  e to query...   
7610: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
7620: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7630: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
7640: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61  lly qualified pa
7650: 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65  th and file name
7660: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
7670: 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
7680: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20 61 6e  ,..    /// if an
7690: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
76a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
76b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
76c0: 72 69 6e 67 20 47 65 74 46 69 6c 65 4e 61 6d 65  ring GetFileName
76d0: 28 73 74 72 69 6e 67 20 64 62 4e 61 6d 65 29 0d  (string dbName).
76e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
76f0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
7700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7710: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
7720: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
7730: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7740: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7750: 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61  qlite3_db_filena
7760: 6d 65 5f 62 79 74 65 73 28 0d 0a 20 20 20 20 20  me_bytes(..     
7770: 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 54 6f 55         _sql, ToU
7780: 54 46 38 28 64 62 4e 61 6d 65 29 29 2c 20 2d 31  TF8(dbName)), -1
7790: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
77a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
77b0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
77c0: 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hod attempts to 
77d0: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 64  determine if a d
77e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
77f0: 6f 6e 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 2f  on opened..    /
7800: 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
7810: 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d  ified <see cref=
7820: 22 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73  "SQLiteOpenFlags
7830: 45 6e 75 6d 22 20 2f 3e 20 73 68 6f 75 6c 64 20  Enum" /> should 
7840: 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f  be..    /// allo
7850: 77 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6e  wed into the con
7860: 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 2e 0d 0a 20  nection pool... 
7870: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7880: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7890: 6d 20 6e 61 6d 65 3d 22 6f 70 65 6e 46 6c 61 67  m name="openFlag
78a0: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
78b0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
78c0: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 22  teOpenFlagsEnum"
78d0: 20 2f 3e 20 74 68 61 74 20 77 65 72 65 20 73 70   /> that were sp
78e0: 65 63 69 66 69 65 64 20 77 68 65 6e 20 74 68 65  ecified when the
78f0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
7900: 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
7910: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
7920: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7930: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
7940: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63  on-zero if the c
7950: 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64  onnection should
7960: 20 28 65 76 65 6e 74 75 61 6c 6c 79 29 20 62 65   (eventually) be
7970: 20 61 6c 6c 6f 77 65 64 20 69 6e 74 6f 20 74 68   allowed into th
7980: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
7990: 63 74 69 6f 6e 20 70 6f 6f 6c 3b 20 6f 74 68 65  ction pool; othe
79a0: 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
79b0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
79c0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
79d0: 61 74 69 63 20 62 6f 6f 6c 20 49 73 41 6c 6c 6f  atic bool IsAllo
79e0: 77 65 64 54 6f 55 73 65 50 6f 6f 6c 28 0d 0a 20  wedToUsePool(.. 
79f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4f 70 65         SQLiteOpe
7a00: 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46  nFlagsEnum openF
7a10: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  lags..        ).
7a20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7a30: 72 65 74 75 72 6e 20 6f 70 65 6e 46 6c 61 67 73  return openFlags
7a40: 20 3d 3d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c   == SQLiteOpenFl
7a50: 61 67 73 45 6e 75 6d 2e 44 65 66 61 75 6c 74 3b  agsEnum.Default;
7a60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7a70: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7a80: 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e   void Open(strin
7a90: 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73  g strFilename, s
7aa0: 74 72 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53  tring vfsName, S
7ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7ac0: 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46  lags connectionF
7ad0: 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e  lags, SQLiteOpen
7ae0: 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c  FlagsEnum openFl
7af0: 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c  ags, int maxPool
7b00: 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f  Size, bool usePo
7b10: 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ol)..    {..    
7b20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
7b30: 4f 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61  OTE: If the data
7b40: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7b50: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  is currently ope
7b60: 6e 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  n, attempt to.. 
7b70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c       //       cl
7b80: 6f 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69  ose it now.  Thi
7b90: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62  s must be done b
7ba0: 65 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20  ecause the file 
7bb0: 6e 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f  name or..      /
7bc0: 2f 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61  /       other pa
7bd0: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
7be0: 79 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64  y impact the und
7bf0: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
7c00: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
7c10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20   connection may 
7c20: 68 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20  have changed... 
7c30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
7c40: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
7c50: 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a   Close(false);..
7c60: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
7c70: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
7c80: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
7c90: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63   not closed succ
7ca0: 65 73 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20  essfully, throw 
7cb0: 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  an..      //    
7cc0: 20 20 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77     exception now
7cd0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
7ce0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
7cf0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7d10: 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
7d20: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
7d30: 73 74 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d  still active");.
7d40: 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  ...      _usePoo
7d50: 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 0d 0a  l = usePool;....
7d60: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7d70: 2f 2f 20 42 55 47 46 49 58 3a 20 44 6f 20 6e 6f  // BUGFIX: Do no
7d80: 74 20 61 6c 6c 6f 77 20 61 20 63 6f 6e 6e 65 63  t allow a connec
7d90: 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 70 6f  tion into the po
7da0: 6f 6c 20 69 66 20 69 74 20 77 61 73 20 6f 70 65  ol if it was ope
7db0: 6e 65 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ned..      //   
7dc0: 20 20 20 20 20 20 77 69 74 68 20 66 6c 61 67 73        with flags
7dd0: 20 74 68 61 74 20 61 72 65 20 69 6e 63 6f 6d 70   that are incomp
7de0: 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65 20  atible with the 
7df0: 64 65 66 61 75 6c 74 20 66 6c 61 67 73 0d 0a 20  default flags.. 
7e00: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
7e10: 28 65 2e 67 2e 20 72 65 61 64 2d 6f 6e 6c 79 29  (e.g. read-only)
7e20: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
7e30: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 20     if (_usePool 
7e40: 26 26 20 21 49 73 41 6c 6c 6f 77 65 64 54 6f 55  && !IsAllowedToU
7e50: 73 65 50 6f 6f 6c 28 6f 70 65 6e 46 6c 61 67 73  sePool(openFlags
7e60: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 75  ))..          _u
7e70: 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
7e80: 0a 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61  ...      _fileNa
7e90: 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65  me = strFilename
7ea0: 3b 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20  ;..      _flags 
7eb0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  = connectionFlag
7ec0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  s;....      if (
7ed0: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
7ee0: 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20  {..        _sql 
7ef0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7f00: 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74  onPool.Remove(st
7f10: 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f  rFilename, maxPo
7f20: 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f  olSize, out _poo
7f30: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  lVersion);....  
7f40: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7f50: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
7f60: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
7f70: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
7fa0: 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f  ntType.OpenedFro
7fb0: 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  mPool, null, nul
7fc0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
7fd0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
7fe0: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
7ff0: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
8000: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
8010: 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46  f(SQLite3), strF
8020: 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65  ilename, vfsName
8030: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
8040: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
8050: 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f  openFlags, maxPo
8060: 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c  olSize, usePool,
8070: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29   _poolVersion })
8080: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
8090: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
80a0: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
80b0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
80c0: 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
80d0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
80e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
80f0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
8100: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
8110: 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28           "Open (
8120: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e  Pool): {0}", Han
8130: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
8140: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8150: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
8160: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
8170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
8180: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
8190: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
81a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
81b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
81c0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
81d0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
81e0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
81f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8200: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
8210: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
8220: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8230: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
8240: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8250: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  D..          int
8260: 20 65 78 74 46 75 6e 63 73 20 3d 20 48 65 6c 70   extFuncs = Help
8270: 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61  erMethods.HasFla
8280: 67 73 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  gs(connectionFla
8290: 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  gs, SQLiteConnec
82a0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65  tionFlags.NoExte
82b0: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20  nsionFunctions) 
82c0: 3f 20 30 20 3a 20 31 3b 0d 0a 0d 0a 20 20 20 20  ? 0 : 1;....    
82d0: 20 20 20 20 20 20 69 66 20 28 65 78 74 46 75 6e        if (extFun
82e0: 63 73 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  cs != 0)..      
82f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8300: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8310: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8320: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
8330: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
8340: 6d 65 29 2c 20 54 6f 55 54 46 38 28 76 66 73 4e  me), ToUTF8(vfsN
8350: 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  ame), openFlags,
8360: 20 65 78 74 46 75 6e 63 73 2c 20 72 65 66 20 64   extFuncs, ref d
8370: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  b);..          }
8380: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
8390: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
83a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
83b0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
83c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
83d0: 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46  e3_open_v2(ToUTF
83e0: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
83f0: 72 65 66 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67  ref db, openFlag
8400: 73 2c 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d  s, ToUTF8(vfsNam
8410: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
8420: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
8430: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
8440: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
8450: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
8460: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
8470: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
8480: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8490: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
84a0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f                "O
84c0: 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b  pen: {0}", db));
84d0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
84e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
84f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8500: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8510: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8520: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
8530: 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c    _sql = new SQL
8540: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
8550: 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a  dle(db, true);..
8560: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8570: 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b     lock (_sql) {
8580: 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20   /* HACK: Force 
8590: 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f  the SyncBlock to
85a0: 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f   be "created" no
85b0: 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20  w. */ }....     
85c0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
85d0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
85e0: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
85f0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
8600: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8610: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
8620: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
8630: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  andle, null,..  
8640: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
8650: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
8660: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
8670: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
8680: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
8690: 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46  f(SQLite3), strF
86a0: 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65  ilename, vfsName
86b0: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
86c0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
86d0: 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f  openFlags, maxPo
86e0: 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20  olSize, usePool 
86f0: 7d 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  }));..      }...
8700: 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66  .      // Bind f
8710: 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73  unctions to this
8720: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66   connection.  If
8730: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75   any previous fu
8740: 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  nctions of the s
8750: 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ame name..      
8760: 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79 20  // were already 
8770: 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  bound, then the 
8780: 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70  new bindings rep
8790: 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20  lace the old... 
87a0: 20 20 20 20 20 69 66 20 28 21 48 65 6c 70 65 72       if (!Helper
87b0: 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73  Methods.HasFlags
87c0: 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  (connectionFlags
87d0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
87e0: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
87f0: 6e 63 74 69 6f 6e 73 29 29 0d 0a 20 20 20 20 20  nctions))..     
8800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
8810: 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20   (_functions == 
8820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8830: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20       _functions 
8840: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
8850: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8860: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
8870: 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a  Function>();....
8880: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
8890: 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c  h (KeyValuePair<
88a0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
88b0: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
88c0: 75 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20  unction> pair.. 
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88e0: 20 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69   in SQLiteFuncti
88f0: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
8900: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
8910: 6e 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  nFlags))..      
8920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8930: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
8940: 70 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72  pair.Key] = pair
8950: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
8960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
8970: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
8980: 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e  t(0);..      GC.
8990: 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b  KeepAlive(_sql);
89a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
89b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
89c0: 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28   void ClearPool(
89d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
89e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
89f0: 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f  Pool.ClearPool(_
8a00: 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
8a10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8a20: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
8a30: 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  ountPool()..    
8a40: 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  {..        Dicti
8a50: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
8a60: 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c  t> counts = null
8a70: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f  ;..        int o
8a80: 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  penCount = 0;.. 
8a90: 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65         int close
8aa0: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
8ab0: 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75      int totalCou
8ac0: 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  nt = 0;....     
8ad0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
8ae0: 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74  ionPool.GetCount
8af0: 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  s(_fileName,..  
8b00: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f            ref co
8b10: 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f  unts, ref openCo
8b20: 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f  unt, ref closeCo
8b30: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
8b40: 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74    ref totalCount
8b50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
8b60: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
8b70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8b80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8b90: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
8ba0: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
8bb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
8bc0: 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b  ntPtr db = _sql;
8bd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d  ..      if (db =
8be0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74  = IntPtr.Zero) t
8bf0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8c00: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
8c10: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
8c20: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20  vailable");..   
8c30: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8c40: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8c50: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8c60: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
8c70: 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b  db, nTimeoutMS);
8c80: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
8c90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8ca0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8cb0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8cc0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8cd0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8ce0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8cf0: 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  de bool Step(SQL
8d00: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8d10: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
8d20: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8d30: 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f   n;..      Rando
8d40: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
8d50: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
8d60: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
8d70: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
8d80: 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74  t;..      uint t
8d90: 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28  imeout = (uint)(
8da0: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
8db0: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
8dc0: 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1000);....      
8dd0: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
8de0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  ();....      whi
8df0: 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
8e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
8e10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8e20: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8e30: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8e40: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
8e50: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
8e60: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
8e70: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
8e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8e90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8ea0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8eb0: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
8ec0: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  e_stmt);..      
8ed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
8ee0: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
8ef0: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
8f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8f10: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
8f20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8f30: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8f40: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
8f50: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8f60: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
8f70: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
8f80: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fb0: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
8fc0: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d  Code.Interrupt;.
8fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8ff0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9000: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
9010: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
9020: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
9030: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9040: 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75  .Interrupt) retu
9050: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
9060: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
9070: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
9080: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
9090: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
90a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
90b0: 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c  Done) return fal
90c0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
90d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
90e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
90f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9100: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9110: 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e r;....        
9120: 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63    // An error oc
9130: 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20  curred, attempt 
9140: 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61  to reset the sta
9150: 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20  tement.  If the 
9160: 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63  reset worked bec
9170: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..      
9180: 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61      // schema ha
9190: 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72  s changed, re-tr
91a0: 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e  y the step again
91b0: 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64  .  If it errored
91c0: 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65   our because the
91d0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
91e0: 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65       // is locke
91f0: 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74  d, then keep ret
9200: 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20  rying until the 
9210: 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20  command timeout 
9220: 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
9230: 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d     r = Reset(stm
9240: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
9250: 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65   if (r == SQLite
9260: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
9270: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9280: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9290: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
92a0: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
92b0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
92c0: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
92d0: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72  Code.Locked || r
92e0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
92f0: 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d  ode.Busy) && stm
9300: 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75  t._command != nu
9310: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
9320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9330: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
9340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
9350: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
9360: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
9370: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
9380: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
9390: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
93a0: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
93b0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
93c0: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
93d0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
93e0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
93f0: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
9400: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
9410: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
9420: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
9430: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29  ttick > timeout)
9440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
9460: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
9470: 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c  xception(r, GetL
9480: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
9490: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94a0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
94d0: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
94e0: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
94f0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
9500: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
9510: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
9520: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
9530: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
9540: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
9550: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9560: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9580: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9590: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
95a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
95b0: 74 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72  tr() core librar
95c0: 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b  y API been check
95d0: 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20  ed for yet?..   
95e0: 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69   /// If so, is i
95f0: 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20  t present?..    
9600: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9610: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
9620: 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72  ic bool? have_er
9630: 72 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rstr = null;....
9640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9660: 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ns the error mes
9670: 73 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65  sage for the spe
9680: 63 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65  cified SQLite re
9690: 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d  turn code using.
96a0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
96b0: 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75  ite3_errstr() fu
96c0: 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20  nction, falling 
96d0: 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65  back to the inte
96e0: 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20  rnal lookup..   
96f0: 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65   /// table if ne
9700: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  cessary...    //
9710: 2f 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49  /..    /// WARNI
9720: 4e 47 3a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76  NG: Do not remov
9730: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 69  e this method, i
9740: 74 20 69 73 20 75 73 65 64 20 76 69 61 20 72 65  t is used via re
9750: 66 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  flection...    /
9760: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9770: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9780: 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69  me="rc">The SQLi
9790: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c  te return code.<
97a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
97b0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72   <returns>The er
97c0: 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e  ror message or n
97d0: 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74  ull if it cannot
97e0: 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75   be found.</retu
97f0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
9800: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
9810: 20 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28   GetErrorString(
9820: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9830: 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rc)..    {..    
9840: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9860: 69 66 20 28 68 61 76 65 5f 65 72 72 73 74 72 20  if (have_errstr 
9870: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
9880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9890: 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 65 72           int ver
98a0: 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c  sionNumber = SQL
98b0: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
98c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
98d0: 20 20 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d     have_errstr =
98e0: 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20   (versionNumber 
98f0: 3e 3d 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20  >= 3007015);..  
9900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
9920: 62 6f 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72  bool)have_errstr
9930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9950: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
9960: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9970: 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74  ds.sqlite3_errst
9980: 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  r(rc);....      
9990: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74            if (pt
99a0: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
99b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
99c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
99d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
99e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
99f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a00: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
9a10: 72 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a  ringAnsi(ptr);..
9a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
9a30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9a40: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
9a50: 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  tr, -1);..#endif
9a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9a90: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e         catch (En
9aa0: 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64  tryPointNotFound
9ab0: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
9ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ad0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9ae0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ...        }....
9af0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46          return F
9b00: 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53  allbackGetErrorS
9b10: 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20  tring(rc);..    
9b20: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
9b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9b40: 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  Has the sqlite3_
9b50: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20  stmt_readonly() 
9b60: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50 49  core library API
9b70: 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f   been checked fo
9b80: 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  r yet?..    /// 
9b90: 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65  If so, is it pre
9ba0: 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sent?..    /// <
9bb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
9bc0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
9bd0: 6f 6c 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65  ol? have_stmt_re
9be0: 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  adonly = null;..
9bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9c00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
9c10: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
9c20: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
9c30: 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64  tatement is read
9c40: 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e  -only in nature.
9c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
9c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
9c80: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  >The statement t
9c90: 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
9ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9cb0: 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f  ns>True if the o
9cc0: 75 74 65 72 20 71 75 65 72 79 20 69 73 20 72 65  uter query is re
9cd0: 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e  ad-only.</return
9ce0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
9cf0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
9d00: 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20  sReadOnly(..    
9d10: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
9d20: 65 6e 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20  ent stmt..      
9d30: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
9d40: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9d50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9d60: 69 66 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65  if (have_stmt_re
9d70: 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  adonly == null).
9d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9da0: 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65  int versionNumbe
9db0: 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f  r = SQLiteVersio
9dc0: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
9dd0: 20 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 73            have_s
9de0: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28  tmt_readonly = (
9df0: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
9e00: 20 33 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20   3007004);..    
9e10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9e20: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
9e30: 6f 6c 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61  ol)have_stmt_rea
9e40: 64 6f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  donly)..        
9e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9e60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
9e70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9e80: 73 2e 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72  s.sqlite3_stmt_r
9e90: 65 61 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadonly(..      
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9eb0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
9ec0: 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20   != 0;..        
9ed0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
9ee0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
9ef0: 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f  (EntryPointNotFo
9f00: 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  undException).. 
9f10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9f20: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
9f30: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
9f40: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9f50: 6e 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45  n false; /* NOTE
9f60: 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d  : Unknown, assum
9f70: 65 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20  e false. */..   
9f80: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9f90: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
9fa0: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65  teErrorCode Rese
9fb0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
9fc0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
9fd0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9fe0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
9ff0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
a000: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
a010: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a020: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e  sqlite3_reset_in
a030: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
a040: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65  te_stmt);..#else
a050: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
a060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a070: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
a080: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
a090: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
a0a0: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68     // If the sch
a0b0: 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79  ema changed, try
a0c0: 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20   and re-prepare 
a0d0: 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  it..      if (n 
a0e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
a0f0: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
a100: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
a110: 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79  Recreate a dummy
a120: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
a130: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
a140: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
a150: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61  using (SQLiteSta
a160: 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65  tement tmp = Pre
a170: 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e  pare(null, stmt.
a180: 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e  _sqlStatement, n
a190: 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74  ull, (uint)(stmt
a1a0: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
a1b0: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
a1c0: 29 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20  ), ref str))..  
a1d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a1e0: 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74     // Finalize t
a1f0: 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74  he existing stat
a200: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
a210: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
a220: 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  mt.Dispose();.. 
a230: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73           // Reas
a240: 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65  sign a new state
a250: 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20  ment pointer to 
a260: 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e  the old statemen
a270: 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20  t and clear the 
a280: 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20  temporary one.. 
a290: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6d 70           if (tmp
a2a0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
a2b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a2c0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
a2d0: 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c  _stmt = tmp._sql
a2e0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
a2f0: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
a300: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
a310: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
a320: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
a330: 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d  pply parameters.
a340: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
a350: 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29  BindParameters()
a360: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a370: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a380: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b  iteErrorCode.Unk
a390: 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77  nown; // Reset w
a3a0: 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65  as OK, with sche
a3b0: 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20  ma change..     
a3c0: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69   }..      else i
a3d0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
a3e0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
a3f0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
a400: 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20  orCode.Busy)..  
a410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
a420: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
a430: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a440: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74  e.Ok)..        t
a450: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a460: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a470: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
a480: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20        return n; 
a490: 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20  // We reset OK, 
a4a0: 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  no schema change
a4b0: 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  s..    }....    
a4c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a4d0: 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74  e string GetLast
a4e0: 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a  Error()..    {..
a4f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
a500: 65 74 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c  etLastError(null
a510: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a520: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a530: 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73  de string GetLas
a540: 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65  tError(string de
a550: 66 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a  fValue)..    {..
a560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
a570: 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61  esult = SQLiteBa
a580: 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28  se.GetLastError(
a590: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
a5a0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
a5b0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72  .IsNullOrEmpty(r
a5c0: 65 73 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d  esult)) result =
a5d0: 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20   defValue;..    
a5e0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
a5f0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
a600: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
a670: 51 75 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63  Query Diagnostic
a680: 73 20 53 75 70 70 6f 72 74 0d 0a 20 20 20 20 2f  s Support..    /
a690: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a6a0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
a6b0: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
a6c0: 20 74 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65   track of whethe
a6d0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20  r or not the..  
a6e0: 20 20 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f    /// "SQLite_Fo
a6f0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65  rceLogPrepare" e
a700: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
a710: 62 6c 65 20 68 61 73 20 62 65 65 6e 20 71 75 65  ble has been que
a720: 72 69 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20  ried.  If so,.. 
a730: 20 20 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f     /// it will o
a740: 6e 6c 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20  nly be non-zero 
a750: 69 66 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65  if the environme
a760: 6e 74 20 76 61 72 69 61 62 6c 65 20 77 61 73 20  nt variable was 
a770: 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  present...    //
a780: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a790: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a7a0: 20 62 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50   bool? forceLogP
a7b0: 72 65 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  repare = null;..
a7c0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
a830: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a840: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
a850: 66 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70  f all calls to p
a860: 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65  repare a SQL que
a870: 72 79 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65  ry will be logge
a880: 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61  d,..    /// rega
a890: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c  rdless of the fl
a8a0: 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
a8b0: 63 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f  ciated connectio
a8c0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
a8d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a8e0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
a8f0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c  // Non-zero to l
a900: 6f 67 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20  og all calls to 
a910: 70 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75  prepare a SQL qu
a920: 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ery...    /// </
a930: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
a940: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
a950: 6f 6c 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  ol ForceLogPrepa
a960: 72 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  re()..    {..   
a970: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
a980: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  oot)..        {.
a990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a9a0: 28 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  (forceLogPrepare
a9b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a9c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a9d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
a9e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a9f0: 73 2e 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  s.GetSettingValu
aa00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
aa20: 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70  ite_ForceLogPrep
aa30: 61 72 65 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e  are", null) != n
aa40: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
aa50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
aa70: 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 74  ceLogPrepare = t
aa80: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
aa90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
aaa0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
aac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aad0: 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72        forceLogPr
aae0: 65 70 61 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a  epare = false;..
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ab10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ab20: 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72  return (bool)for
ab30: 63 65 4c 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20  ceLogPrepare;.. 
ab40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
ab50: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
ab60: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
abd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
abe0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
abf0: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
ac00: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
ac10: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
ac20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
ac30: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
ac40: 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e  outMS, ref strin
ac50: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
ac60: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
ac70: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
ac80: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 20 73 74  mpty(strSql)) st
ac90: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 54 72  rSql = strSql.Tr
aca0: 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  im();..      if 
acb0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
acc0: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
acd0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
ace0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
acf0: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
ad00: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
ad10: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
ad20: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
ad30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ad40: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
ad50: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
ad60: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
ad70: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
ad80: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
ad90: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
ada0: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
adb0: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
adc0: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
add0: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
ade0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
adf0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
ae00: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
ae10: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
ae20: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
ae30: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
ae40: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
ae50: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
ae60: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
ae70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ae80: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
ae90: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aeb0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
aec0: 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75  ringFormat(Cultu
aed0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
aee0: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
aef0: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
af00: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
af10: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
af20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
af30: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
af40: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
af50: 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
af60: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
af70: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
af80: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
af90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
afa0: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
afb0: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
afc0: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
afd0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
afe0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
aff0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
b000: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
b010: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
b020: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
b030: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
b040: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  efault;....     
b050: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
b060: 70 61 72 65 28 29 20 7c 7c 0d 0a 20 20 20 20 20  pare() ||..     
b070: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
b080: 64 73 2e 4c 6f 67 50 72 65 70 61 72 65 28 66 6c  ds.LogPrepare(fl
b090: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ags))..      {..
b0a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73            if ((s
b0b0: 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  trSql == null) |
b0c0: 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  | (strSql.Length
b0d0: 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71   == 0) || (strSq
b0e0: 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20  l.Trim().Length 
b0f0: 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  == 0))..        
b100: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
b110: 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70  LogMessage("Prep
b120: 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e  aring {<nothing>
b130: 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20  }...");..       
b140: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
b150: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
b160: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
b170: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
b180: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
b190: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
b1a0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
b1b0: 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e  lture, "Preparin
b1c0: 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73  g {{{0}}}...", s
b1d0: 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20  trSql));..      
b1e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  }....      IntPt
b1f0: 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e  r stmt = IntPtr.
b200: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
b210: 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72  Ptr ptr = IntPtr
b220: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
b230: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
b240: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b250: 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f  e n = SQLiteErro
b260: 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20  rCode.Schema;.. 
b270: 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65 73       int retries
b280: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
b290: 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73 20   maximumRetries 
b2a0: 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20  = (cnn != null) 
b2b0: 3f 20 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65  ? cnn._prepareRe
b2c0: 74 72 69 65 73 20 3a 20 53 51 4c 69 74 65 43 6f  tries : SQLiteCo
b2d0: 6e 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74  nnection.Default
b2e0: 50 72 65 70 61 72 65 52 65 74 72 69 65 73 3b 0d  PrepareRetries;.
b2f0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
b300: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
b310: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
b320: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
b330: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
b340: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
b350: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
b360: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
b370: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
b380: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
b390: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
b3a0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65  t;....      Rese
b3b0: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d  tCancelCount();.
b3c0: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
b3d0: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
b3e0: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
b3f0: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
b400: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
b410: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
b420: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
b430: 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  t();..      SQLi
b440: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
b450: 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  e statementHandl
b460: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
b470: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
b480: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e         while ((n
b490: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b4a0: 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20  ode.Schema || n 
b4b0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b4c0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
b4d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b4e0: 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69  e.Busy) && retri
b4f0: 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72  es < maximumRetr
b500: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ies)..        {.
b510: 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a  .          try..
b520: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b530: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
b540: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
b550: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b560: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
b570: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
b580: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
b590: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b5a0: 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20           stmt = 
b5b0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
b5c0: 20 20 20 20 20 20 20 20 20 20 70 74 72 20 3d 20            ptr = 
b5d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
b5e0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
b5f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
b600: 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20    len = 0;..    
b610: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
b620: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b630: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
b640: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73  interop(_sql, ps
b650: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
b660: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
b670: 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  ptr, ref len);..
b680: 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50  #else..#if USE_P
b690: 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20  REPARE_V2..     
b6a0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
b6b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b6c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
b6d0: 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  2(_sql, psql, b.
b6e0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
b6f0: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d  stmt, ref ptr);.
b700: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
b710: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b720: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b730: 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c  te3_prepare(_sql
b740: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
b750: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
b760: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69  ref ptr);..#endi
b770: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  f..            l
b780: 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  en = -1;..#endif
b790: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
b7a0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
b7b0: 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20  _STATEMENT..    
b7c0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
b7d0: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
b7e0: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
b7f0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
b800: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
b810: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
b820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b830: 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29    "Prepare ({0})
b840: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
b850: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
b860: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
b870: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b880: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
b890: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
b8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8c0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
b8d0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
b8e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
b8f0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
b900: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
b910: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
b920: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
b930: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
b940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b950: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b960: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
b970: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
b980: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b9a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b9b0: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
b9c0: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
b9d0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
b9e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
b9f0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
ba00: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
ba10: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
ba20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ba30: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
ba40: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
ba50: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
ba60: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
ba70: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
ba80: 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71 6c  e3), cnn, strSql
ba90: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
baa0: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
bab0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bac0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
bad0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
bae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bb00: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
bb10: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bb40: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb60: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
bb70: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bba0: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
bbb0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
bbc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bbd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bbe0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
bbf0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
bc00: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
bc10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bc20: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
bc30: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
bc40: 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rupt)..         
bc50: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
bc60: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
bc70: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bc80: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
bc90: 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b          retries+
bca0: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +;..          el
bcb0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
bcc0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
bcd0: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  r)..          {.
bce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
bcf0: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
bd00: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
bd10: 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a  "near \"TYPES\":
bd20: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20   syntax error", 
bd30: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
bd40: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
bd50: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
bd60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bd70: 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20          int pos 
bd80: 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66  = strSql.IndexOf
bd90: 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (';');..        
bda0: 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d        if (pos ==
bdb0: 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71   -1) pos = strSq
bdc0: 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d  l.Length - 1;...
bdd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
bde0: 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c  ypedefs = strSql
bdf0: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f  .Substring(0, po
be00: 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  s + 1);..       
be10: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
be20: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
be30: 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  (pos + 1);....  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
be50: 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e 45  emain = String.E
be60: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
be70: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
be80: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
be90: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
bea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
beb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bec0: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
bed0: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
bee0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
bef0: 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29  , ref strRemain)
bf00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bf10: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
bf20: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
bf30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bf40: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64           if (cmd
bf50: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
bf60: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53             cmd.S
bf70: 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73  etTypes(typedefs
bf80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
bf90: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
bfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bfb0: 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e  #if (NET_35 || N
bfc0: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
bfd0: 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45  || NET_451 || NE
bfe0: 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20  T_452 || NET_46 
bff0: 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45  || NET_461 || NE
c000: 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20  T_462 || NET_47 
c010: 7c 7c 20 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45  || NET_471 || NE
c020: 54 5f 34 37 32 29 20 26 26 20 21 50 4c 41 54 46  T_472) && !PLATF
c030: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
c040: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
c050: 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c    else if (_buil
c060: 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61  dingSchema == fa
c070: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f  lse && String.Co
c080: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
c090: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
c0a0: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
c0b0: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
c0c0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
c0d0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
c0e0: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
c0f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c100: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
c110: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
c120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
c130: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
c140: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c150: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
c160: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c170: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
c180: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
c190: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
c1a0: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
c1b0: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
c1c0: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
c1d0: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
c1e0: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
c1f0: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
c200: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
c230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c240: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
c250: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
c260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c270: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
c280: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
c290: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
c2a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
c2d0: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
c2e0: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
c2f0: 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  ref strRemain);.
c300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c310: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
c320: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
c330: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c350: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
c360: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c370: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c3a0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
c3b0: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
c3c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c3d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
c3e0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
c400: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c410: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
c420: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
c430: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f  rrorCode.Busy) /
c440: 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61  / Locked -- dela
c450: 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  y a small amount
c460: 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67   before retrying
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
c480: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
c490: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
c4a0: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
c4b0: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
c4c0: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
c4d0: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
c4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4f0: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
c500: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
c510: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
c520: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
c530: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
c540: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
c550: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
c560: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
c570: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
c580: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
c590: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d  ck > timeoutMS).
c5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
c5c0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c5d0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c5e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c5f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c600: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
c610: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
c630: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
c640: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
c650: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
c660: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
c670: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
c680: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
c690: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
c6a0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
c6b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c6c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
c6d0: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
c6e0: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
c6f0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
c700: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c710: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c720: 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20  rCode.Ok) ||..  
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
c740: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
c750: 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20  ode.Row) ||..   
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
c770: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
c780: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
c790: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c7a0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
c7b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
c7c0: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
c7d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c7e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c7f0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c800: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
c810: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c820: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c830: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
c840: 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  upt) return null
c850: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
c860: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
c870: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
c880: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c890: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
c8a0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
c8b0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
c8c0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
c8d0: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
c8e0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
c8f0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64  dle != null) cmd
c900: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
c910: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
c920: 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  gs, statementHan
c930: 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  dle, strSql.Subs
c940: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
c950: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
c960: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
c970: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
c980: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
c990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
c9a0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
c9b0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
c9c0: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
c9d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
c9e0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
c9f0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
ca00: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ca10: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
ca20: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
ca30: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
ca40: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
ca50: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
ca60: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
ca70: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
ca80: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
caa0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
cab0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
cac0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
cad0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
cae0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
caf0: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
cb00: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
cb10: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
cb20: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
cb30: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
cb40: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
cb50: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
cb60: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
cb70: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
cb80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
cb90: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
cba0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
cbb0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cbc0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
cbd0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
cbe0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
cbf0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
cc00: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
cc10: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
cc20: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
cc30: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
cc40: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
cc50: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
cc60: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
cc70: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
cc80: 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  Ptr, index, valu
cc90: 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c  e.GetType(), val
cca0: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
ccb0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
ccc0: 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74  ic string Format
ccd0: 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d  DateTime(DateTim
cce0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
ccf0: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
cd00: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
cd10: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
cd20: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
cd30: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
cd40: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79  lue.ToString("yy
cd50: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
cd60: 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a  s.FFFFFFFK"));..
cd70: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
cd80: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
cd90: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
cda0: 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d  nd(value.Kind);.
cdb0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
cdc0: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
cdd0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
cde0: 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29  end(value.Ticks)
cdf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
ce00: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
ce10: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
ce20: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
ce30: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
ce40: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
ce50: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
ce60: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
ce70: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
ce80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
ce90: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
cea0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
ceb0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
cec0: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
ced0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
cee0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cef0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
cf00: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
cf20: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
cf30: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
cf40: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
cf50: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
cf60: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
cf70: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
cf80: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
cf90: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
cfa0: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
cfb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cfc0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
cfd0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
cfe0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
cff0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
d000: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
d010: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
d020: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
d030: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
d040: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
d050: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
d060: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
d070: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
d080: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
d090: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
d0a0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
d0b0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
d0c0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
d0d0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
d0e0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
d0f0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
d100: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
d110: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
d120: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
d130: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
d140: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
d150: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
d160: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
d170: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
d180: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
d190: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
d1a0: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
d1b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d1c0: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
d1d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d1e0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
d1f0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
d200: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
d210: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
d220: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
d230: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
d240: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
d250: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
d260: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
d270: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
d280: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
d290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
d2a0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
d2b0: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
d2c0: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
d2d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
d2e0: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
d2f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
d300: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
d310: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
d320: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
d330: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
d340: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
d350: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d360: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
d370: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
d380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d390: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
d3a0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
d3b0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
d3c0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
d3d0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
d3e0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
d3f0: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
d400: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
d410: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
d420: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
d430: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
d440: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
d450: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
d460: 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76  peof(Byte[]), (v
d470: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
d480: 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72  ToHexadecimalStr
d490: 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e  ing(value) : "<n
d4a0: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
d4b0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d4c0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
d4d0: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(SQLite
d4e0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d4f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d500: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d510: 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76   index, double v
d520: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
d530: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
d540: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
d550: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
d560: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
d570: 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50     if (ForceLogP
d580: 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70  repare() || Help
d590: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
d5a0: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
d5b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d5c0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
d5d0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
d5e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
d5f0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
d600: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
d610: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
d620: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
d630: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d640: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
d650: 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  le(handle, index
d660: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
d670: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d680: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d690: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d6a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d6b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
d6c0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
d6d0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
d6e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
d6f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d700: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d710: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
d720: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
d730: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
d740: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d750: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d760: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d770: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d780: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d790: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d7a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
d7b0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
d7c0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
d7d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d7e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d7f0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
d800: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d810: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
d820: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
d830: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
d840: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d850: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
d860: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d870: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
d880: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
d890: 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f       if (ForceLo
d8a0: 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65  gPrepare() || He
d8b0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
d8c0: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
d8d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d8e0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d8f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
d910: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
d920: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d930: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d940: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
d950: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
d960: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d970: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d980: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d990: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d9a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d9b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
d9c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d9d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d9e0: 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51  d Bind_UInt32(SQ
d9f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
da00: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
da10: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
da20: 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74   int index, uint
da30: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
da40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
da50: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
da60: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
da70: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
da80: 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f       if (ForceLo
da90: 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65  gPrepare() || He
daa0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
dab0: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
dac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dad0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
dae0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
daf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
db00: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
db10: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20  rrorCode n;.... 
db20: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
db30: 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
db40: 73 28 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43  s(flags, SQLiteC
db50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
db60: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
db70: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
db80: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
db90: 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d  value2 = value;.
dba0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
dbb0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
dbc0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  K..            n
dbd0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
dbe0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
dbf0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
dc00: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29  , index, value2)
dc10: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
dc20: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
dc30: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
dc40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dc50: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
dc60: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
dc70: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
dc80: 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue2);..#else..  
dc90: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
dca0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
dcb0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
dcc0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
dcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
dce0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dcf0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
dd00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dd10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
dd20: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
dd30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
dd40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
dd50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
dd60: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
dd70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
dd80: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
dd90: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
dda0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ddb0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
ddc0: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
ddd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
dde0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ddf0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
de00: 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  ndex, long value
de10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
de20: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
de30: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
de40: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
de50: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
de60: 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  f (ForceLogPrepa
de70: 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65  re() || HelperMe
de80: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
de90: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
dea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
deb0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
dec0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
ded0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
dee0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
def0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
df00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
df10: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
df20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
df30: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
df40: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
df50: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
df60: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
df70: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
df80: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
df90: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
dfa0: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
dfb0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
dfc0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
dfd0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
dfe0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dff0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e000: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
e010: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
e020: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e030: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
e040: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
e050: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
e060: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
e070: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c  stError());..#el
e080: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
e090: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e0a0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e0b0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
e0c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e0d0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
e0e0: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
e0f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e100: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e110: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
e120: 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61   index, ulong va
e130: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
e140: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e150: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e160: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e170: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e180: 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72    if (ForceLogPr
e190: 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65  epare() || Helpe
e1a0: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
e1b0: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
e1c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e1d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e1e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
e1f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69  .        }....#i
e200: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
e210: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
e220: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e230: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e240: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e250: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
e260: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
e270: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e280: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e290: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e2a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e2b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e2c0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
e2d0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e2e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
e2f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e300: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e310: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e320: 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f  nd_uint64_intero
e330: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
e340: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
e350: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e360: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e370: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e380: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e390: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e3a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
e3b0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e3c0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e3d0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e3e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e3f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
e400: 69 64 20 42 69 6e 64 5f 42 6f 6f 6c 65 61 6e 28  id Bind_Boolean(
e410: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
e420: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
e430: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
e440: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 6f  s, int index, bo
e450: 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ol value)..    {
e460: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e470: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
e480: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
e490: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
e4a0: 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63 65         if (Force
e4b0: 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20  LogPrepare() || 
e4c0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
e4d0: 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
e4e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e4f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
e500: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
e510: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
e520: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76  ...        int v
e530: 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 20 3f 20  alue2 = value ? 
e540: 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  1 : 0;....      
e550: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
e560: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
e570: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e580: 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c  3_bind_int(handl
e590: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32  e, index, value2
e5a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
e5b0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
e5c0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
e5d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e5e0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e5f0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e600: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e610: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
e620: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
e630: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
e640: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e650: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
e660: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
e670: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e680: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
e690: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
e6a0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
e6b0: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
e6c0: 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  f (ForceLogPrepa
e6d0: 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65  re() || HelperMe
e6e0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
e6f0: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
e700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
e710: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
e720: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
e730: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e740: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
e750: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  UTF8(value);....
e760: 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63          if (Forc
e770: 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c  eLogPrepare() ||
e780: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
e790: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
e7a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e7b0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
e7c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
e7d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
e7e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e7f0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e800: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e810: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
e820: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
e830: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
e840: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
e850: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
e860: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
e870: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
e880: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
e890: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
e8a0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
e8b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e8c0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
e8d0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
e8e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
e8f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e900: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
e910: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
e920: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
e930: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
e940: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
e950: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
e960: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
e970: 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70  if (ForceLogPrep
e980: 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d  are() || HelperM
e990: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
e9a0: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
e9b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
e9c0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
e9d0: 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20  ndex, dt);..    
e9e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e9f0: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
ea00: 64 73 2e 48 61 73 46 6c 61 67 73 28 66 6c 61 67  ds.HasFlags(flag
ea10: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
ea20: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74  ionFlags.BindDat
ea30: 65 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 29 0d  eTimeWithKind)).
ea40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ea50: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 64 61          if ((_da
ea60: 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61  tetimeKind != Da
ea70: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
ea80: 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20  cified) &&..    
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e              (dt.
eaa0: 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65  Kind != DateTime
eab0: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
eac0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
ead0: 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21        (dt.Kind !
eae0: 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  = _datetimeKind)
eaf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
eb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb10: 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b    if (_datetimeK
eb20: 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b  ind == DateTimeK
eb30: 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20 20 20 20  ind.Utc)..      
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74                dt
eb50: 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65 72 73 61   = dt.ToUniversa
eb60: 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  lTime();..      
eb70: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
eb80: 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  f (_datetimeKind
eb90: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
eba0: 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20 20 20 20  .Local)..       
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74 20               dt 
ebc0: 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65  = dt.ToLocalTime
ebd0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
ebe0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
ebf0: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
ec00: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
ec10: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ec20: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
ec30: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
ec40: 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20  .Ticks:..       
ec50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec70: 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e  long value = dt.
ec80: 54 69 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  Ticks;....      
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
eca0: 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72   (ForceLogPrepar
ecb0: 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74  e() || HelperMet
ecc0: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
ecd0: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
ece0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
ed10: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
ed20: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ed30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
ed40: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
ed50: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ed80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
ed90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eda0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
edb0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
edc0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
edd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
ede0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
edf0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ee00: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ee10: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ee20: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
ee30: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ee40: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
ee50: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ee70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ee80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ee90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
eea0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
eeb0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
eec0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
eef0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
ef00: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ef10: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
ef20: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef40: 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20  break;..#else.. 
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
ef70: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ef80: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
ef90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
efa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
efb0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
efc0: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
efd0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
efe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eff0: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
f000: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
f010: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 20 20 20  nDay(dt);....   
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f030: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
f040: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
f050: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
f060: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f090: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
f0a0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
f0b0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f0d0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
f0e0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
f0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f100: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f110: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f120: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f130: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
f140: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
f150: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f170: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
f180: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
f190: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f1a0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
f1b0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
f1d0: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
f1e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
f220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f230: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
f240: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
f250: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
f260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f270: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
f280: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
f290: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
f2a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
f2b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
f2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f2d0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
f2e0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
f2f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f300: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
f310: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
f320: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
f330: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f340: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
f350: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
f360: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
f370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
f390: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
f3a0: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
f3b0: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
f3c0: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
f3d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f3e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72           if (For
f3f0: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
f400: 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  | HelperMethods.
f410: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
f460: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
f490: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
f4a0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
f4c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
f4d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f4e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
f4f0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
f500: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f530: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f540: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f550: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
f560: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
f590: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
f5a0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
f5b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f5c0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f5d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f5e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
f5f0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
f600: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
f610: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
f620: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
f630: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f640: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f650: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f660: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f670: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
f680: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
f690: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f6b0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
f6c0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
f6d0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f6f0: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
f700: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
f710: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f720: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
f730: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74  [] b = ToUTF8(dt
f740: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f750: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 46 6f            if (Fo
f760: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20  rceLogPrepare() 
f770: 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  || HelperMethods
f780: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
f7d0: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f800: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f810: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
f820: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f830: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
f840: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
f850: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
f860: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
f870: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f880: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f890: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f8a0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f8b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f8c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f8d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f8e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
f910: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f920: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f930: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
f940: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f950: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
f960: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
f970: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
f980: 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20   blobData)..    
f990: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
f9a0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
f9b0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
f9c0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
f9d0: 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63          if (Forc
f9e0: 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c  eLogPrepare() ||
f9f0: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
fa00: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
fa10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fa20: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
fa30: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c  andle, index, bl
fa40: 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  obData);..      
fa50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
fa60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
fa70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
fa80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
fa90: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
faa0: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
fab0: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
fac0: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
fad0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
fae0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
faf0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
fb00: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
fb10: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
fb20: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
fb30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fb40: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
fb50: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
fb60: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
fb70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
fb80: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
fb90: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
fba0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
fbb0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
fbc0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
fbd0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
fbe0: 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70  if (ForceLogPrep
fbf0: 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d  are() || HelperM
fc00: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
fc10: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
fc20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
fc30: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
fc40: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
fc50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
fc60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
fc70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fc80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
fc90: 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69  d_null(handle, i
fca0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
fcb0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
fcc0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
fcd0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
fce0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
fcf0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
fd00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fd10: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
fd20: 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53  ind_ParamCount(S
fd30: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fd40: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
fd50: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
fd60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fd70: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
fd80: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
fd90: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
fda0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
fdb0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
fdc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fdd0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
fde0: 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65  ter_count(handle
fdf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
fe00: 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72   (ForceLogPrepar
fe10: 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74  e() || HelperMet
fe20: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
fe30: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
fe40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
fe50: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
fe60: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
fe70: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
fe80: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
fe90: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
fea0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
fec0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
fed0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
fee0: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
fef0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
ff00: 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c   count is {1}.",
ff10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff20: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
ff30: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20  value));..      
ff40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
ff50: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
ff60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ff70: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
ff80: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
ff90: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
ffa0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
ffb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
ffc0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
ffd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ffe0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
fff0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
10000 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10010 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
10020 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
10030 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10040 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
10050 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
10060 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  name = UTF8ToStr
10070 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
10080 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10090 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
100a0 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ame_interop(hand
100b0 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  le, index, ref l
100c0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
100d0 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  e..        name 
100e0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
100f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10100 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
10110 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68  parameter_name(h
10120 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d  andle, index), -
10130 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  1);..#endif.... 
10140 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63 65         if (Force
10150 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20  LogPrepare() || 
10160 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
10170 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
10180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10190 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
101a0 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
101b0 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
101c0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
101d0 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
101e0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
101f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
10200 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
10210 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10230 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
10240 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e   paramter #{1} n
10250 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22  ame is {{{2}}}."
10260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10270 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
10280 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d   index, name));.
10290 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
102a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d        return nam
102b0 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
102c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
102d0 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
102e0 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  mIndex(SQLiteSta
102f0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
10300 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
10310 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67  gs flags, string
10320 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20   paramName)..   
10330 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
10340 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
10350 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
10360 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
10370 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
10380 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10390 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
103a0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
103b0 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54  dex(handle, ToUT
103c0 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d  F8(paramName));.
103d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 46  ...        if (F
103e0 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29  orceLogPrepare()
103f0 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64   || HelperMethod
10400 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
10410 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10420 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
10430 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
10440 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
10450 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
10460 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
10470 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
10480 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
10490 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
104a0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
104b0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
104c0 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
104d0 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e   {0} paramter in
104e0 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31  dex of name {{{1
104f0 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a  }}} is #{2}.",..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61  handleIntPtr, pa
10520 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29  ramName, index))
10530 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
10540 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69          return i
10550 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ndex;..    }....
10560 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10570 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
10580 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
10590 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
105a0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
105b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
105c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
105d0 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  umn_count(stmt._
105e0 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
105f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10600 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
10610 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
10620 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10630 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10640 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
10650 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10660 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
10670 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
10680 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
10690 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
106a0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
106b0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
106c0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
106d0 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f len);..#else..
106e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
106f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10700 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10710 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
10720 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10730 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  x);..#endif..   
10740 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50     if (p == IntP
10750 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
10760 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
10770 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69  teException(SQLi
10780 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65  teErrorCode.NoMe
10790 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  m, GetLastError(
107a0 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ));..#if !SQLITE
107b0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
107c0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
107d0 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23  ring(p, len);..#
107e0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
107f0 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10800 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  p, -1);..#endif.
10810 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10820 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10830 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
10840 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
10850 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10860 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
10870 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
10880 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
10890 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
108a0 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f  lumn_type(stmt._
108b0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
108c0 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
108d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
108e0 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
108f0 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
10900 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
10910 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70 65   index, ref Type
10920 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
10930 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ty)..    {..    
10940 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
10950 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10960 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  RD..        len 
10970 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e  = 0;..        In
10980 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
10990 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
109a0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
109b0 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
109c0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
109d0 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
109e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
109f0 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20   len = -1;..    
10a00 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
10a10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10a20 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10a30 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
10a40 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10a50 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
10a60 20 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79         nAffinity
10a70 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74   = ColumnAffinit
10a80 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  y(stmt, index);.
10a90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
10aa0 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p != IntPtr.Zero
10ab0 29 20 26 26 20 28 28 6c 65 6e 20 3e 20 30 29 20  ) && ((len > 0) 
10ac0 7c 7c 20 28 6c 65 6e 20 3d 3d 20 2d 31 29 29 29  || (len == -1)))
10ad0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10ae0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10af0 64 65 63 6c 54 79 70 65 20 3d 20 55 54 46 38 54  declType = UTF8T
10b00 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
10b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
10b30 6c 6c 4f 72 45 6d 70 74 79 28 64 65 63 6c 54 79  llOrEmpty(declTy
10b40 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pe))..          
10b50 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 63        return dec
10b60 6c 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  lType;..        
10b70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  }....        str
10b80 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e  ing[] ar = stmt.
10b90 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b  TypeDefinitions;
10ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10bb0 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
10bc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10bd0 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20      if (index < 
10be0 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b  ar.Length && ar[
10bf0 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d  index] != null).
10c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c10 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78   return ar[index
10c20 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ];..        }...
10c30 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10c40 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
10c50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10c60 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
10c70 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
10c80 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10c90 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
10ca0 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
10cb0 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
10cc0 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
10cd0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
10ce0 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
10cf0 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
10d00 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
10d10 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
10d20 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
10d30 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
10d40 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
10d50 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
10d60 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
10d70 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
10d80 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
10d90 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
10da0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10db0 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
10dc0 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
10dd0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10de0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10df0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
10e00 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
10e10 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
10e20 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10e30 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10e40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10e50 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
10e60 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
10e70 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
10e80 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
10e90 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
10ea0 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
10eb0 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
10ec0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10ed0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10ee0 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74  n_origin_name(st
10ef0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10f00 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
10f10 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
10f20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10f30 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
10f40 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
10f50 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10f60 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10f70 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
10f80 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10f90 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
10fa0 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
10fb0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
10fc0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10fd0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10fe0 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
10ff0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
11000 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
11010 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
11020 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
11030 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
11040 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
11050 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11060 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
11070 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
11080 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
11090 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
110a0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
110b0 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
110c0 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
110d0 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
110e0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
110f0 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
11100 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11110 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
11120 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
11130 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
11140 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11150 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
11160 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
11170 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11180 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11190 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
111a0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
111b0 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
111c0 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
111d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
111e0 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
111f0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
11200 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
11210 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
11220 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11230 65 72 72 69 64 65 20 62 6f 6f 6c 20 44 6f 65 73  erride bool Does
11240 54 61 62 6c 65 45 78 69 73 74 28 0d 0a 20 20 20  TableExist(..   
11250 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
11260 42 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Base,..        s
11270 74 72 69 6e 67 20 74 61 62 6c 65 0d 0a 20 20 20  tring table..   
11280 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
11290 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
112a0 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 20 2f  taType = null; /
112b0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
112c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
112d0 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20  llateSequence = 
112e0 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20 55 53 45  null; /* NOT USE
112f0 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  D */..        bo
11300 6f 6c 20 6e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c  ol notNull = fal
11310 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  se; /* NOT USED 
11320 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
11330 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 66 61   primaryKey = fa
11340 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44  lse; /* NOT USED
11350 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
11360 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20  l autoIncrement 
11370 3d 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20  = false; /* NOT 
11380 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  USED */....     
11390 20 20 20 72 65 74 75 72 6e 20 43 6f 6c 75 6d 6e     return Column
113a0 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20 20 20  MetaData(..     
113b0 20 20 20 20 20 20 20 64 61 74 61 42 61 73 65 2c         dataBase,
113c0 20 74 61 62 6c 65 2c 20 6e 75 6c 6c 2c 20 66 61   table, null, fa
113d0 6c 73 65 2c 20 72 65 66 20 64 61 74 61 54 79 70  lse, ref dataTyp
113e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
113f0 72 65 66 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ref collateSeque
11400 6e 63 65 2c 20 72 65 66 20 6e 6f 74 4e 75 6c 6c  nce, ref notNull
11410 2c 20 72 65 66 20 70 72 69 6d 61 72 79 4b 65 79  , ref primaryKey
11420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
11430 65 66 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74  ef autoIncrement
11440 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11450 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11460 64 65 20 62 6f 6f 6c 20 43 6f 6c 75 6d 6e 4d 65  de bool ColumnMe
11470 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
11480 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
11490 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
114a0 75 6d 6e 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72  umn, bool canThr
114b0 6f 77 2c 20 72 65 66 20 73 74 72 69 6e 67 20 64  ow, ref string d
114c0 61 74 61 54 79 70 65 2c 20 72 65 66 20 73 74 72  ataType, ref str
114d0 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ing collateSeque
114e0 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20 6e 6f  nce, ref bool no
114f0 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f 6c 20  tNull, ref bool 
11500 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20  primaryKey, ref 
11510 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65  bool autoIncreme
11520 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nt)..    {..    
11530 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70    IntPtr dataTyp
11540 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  ePtr = IntPtr.Ze
11550 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
11560 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d 20 49  r collSeqPtr = I
11570 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
11580 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 20     int nnotNull 
11590 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  = 0;..      int 
115a0 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 30 3b  nprimaryKey = 0;
115b0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74  ..      int naut
115c0 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20  oInc = 0;..     
115d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
115e0 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64   n;..      int d
115f0 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  tLen;..      int
11600 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21   csLen;....#if !
11610 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11620 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 30  .      dtLen = 0
11630 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d  ;..      csLen =
11640 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55   0;..      n = U
11650 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11660 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
11670 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
11680 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
11690 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
116a0 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
116b0 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
116c0 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72 2c  ref dataTypePtr,
116d0 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c   ref collSeqPtr,
116e0 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72   ref nnotNull, r
116f0 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ef nprimaryKey, 
11700 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20 72 65  ref nautoInc, re
11710 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63 73 4c  f dtLen, ref csL
11720 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
11730 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     dtLen = -1;..
11740 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31        csLen = -1
11750 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ;....      n = U
11760 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11770 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
11780 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
11790 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
117a0 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
117b0 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
117c0 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61  olumn), ref data
117d0 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c  TypePtr, ref col
117e0 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f  lSeqPtr, ref nno
117f0 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d  tNull, ref nprim
11800 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74  aryKey, ref naut
11810 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  oInc);..#endif..
11820 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
11830 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69  ow && (n != SQLi
11840 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
11850 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
11860 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
11870 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
11880 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
11890 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
118a0 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c  dataTypePtr, dtL
118b0 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  en);..      coll
118c0 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ateSequence = UT
118d0 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53  F8ToString(collS
118e0 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a  eqPtr, csLen);..
118f0 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20  ..      notNull 
11900 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31  = (nnotNull == 1
11910 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72  );..      primar
11920 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79  yKey = (nprimary
11930 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Key == 1);..    
11940 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20    autoIncrement 
11950 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31  = (nautoInc == 1
11960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
11970 72 6e 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  rn (n == SQLiteE
11980 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 3b 0d 0a 20  rrorCode.Ok);.. 
11990 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
119a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
119b0 6a 65 63 74 20 47 65 74 4f 62 6a 65 63 74 28 53  ject GetObject(S
119c0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
119d0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
119e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
119f0 73 77 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66  switch (ColumnAf
11a00 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
11a10 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ex))..        {.
11a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11a30 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
11a40 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
11a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11a70 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
11a80 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
11ab0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
11ac0 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
11ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11af0 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
11b00 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11b30 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
11b40 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
11b50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11b70 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
11b80 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
11b90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11ba0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
11bb0 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
11bc0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
11bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11be0 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 73            long s
11bf0 69 7a 65 20 3d 20 47 65 74 42 79 74 65 73 28 73  ize = GetBytes(s
11c00 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
11c10 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20  ull, 0, 0);.... 
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 69 66 20 28 28 73 69 7a 65 20 3e 20 30     if ((size > 0
11c40 29 20 26 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e  ) && (size <= in
11c50 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20 20  t.MaxValue))..  
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
11c90 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20  e[] bytes = new 
11ca0 62 79 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b  byte[(int)size];
11cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 42              GetB
11cd0 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
11ce0 2c 20 30 2c 20 62 79 74 65 73 2c 20 30 2c 20 28  , 0, bytes, 0, (
11cf0 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20  int)size);....  
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
11d20 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
11d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
11d60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d70 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
11d80 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11db0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 42         return DB
11dc0 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11de0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11df0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
11e00 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
11e10 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
11e20 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11e30 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
11e40 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
11e50 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11e60 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11e70 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
11e80 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
11e90 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RK..      return
11ea0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11eb0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11ec0 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e  umn_double(stmt.
11ed0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11ee0 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
11ef0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
11f00 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
11f10 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
11f20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11f30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11f40 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
11f50 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
11f60 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
11f70 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
11f80 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
11f90 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
11fa0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
11fb0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
11fc0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
11fd0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11fe0 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
11ff0 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74  Boolean(SQLiteSt
12000 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12010 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12020 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
12030 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63  Boolean(GetObjec
12040 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  t(stmt, index), 
12050 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
12060 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 66 61  riantCulture, fa
12070 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
12080 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12090 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53  rride sbyte GetS
120a0 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
120b0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
120c0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
120d0 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
120e0 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74  cked((sbyte)(Get
120f0 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
12100 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
12110 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
12120 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12130 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79  rride byte GetBy
12140 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
12150 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12160 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
12170 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
12180 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74  ed((byte)(GetInt
12190 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
121a0 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
121b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
121c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
121d0 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31  de short GetInt1
121e0 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
121f0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
12200 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
12210 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
12220 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74  d((short)(GetInt
12230 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
12240 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
12250 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
12260 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12270 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55  ride ushort GetU
12280 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
12290 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
122a0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
122b0 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
122c0 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47  ecked((ushort)(G
122d0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
122e0 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
122f0 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
12300 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12310 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
12320 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  tInt32(SQLiteSta
12330 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
12340 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
12350 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
12360 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12370 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
12380 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  int(stmt._sqlite
12390 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
123a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
123b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
123c0 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51  int GetUInt32(SQ
123d0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
123e0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
123f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
12400 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
12410 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d  int)GetInt32(stm
12420 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
12430 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12440 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
12450 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
12460 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
12470 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
12480 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
12490 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
124a0 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
124b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
124c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
124d0 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
124e0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
124f0 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
12500 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
12510 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
12520 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
12530 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12540 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
12550 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
12560 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12570 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
12580 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
12590 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
125a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
125b0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
125c0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
125d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
125e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
125f0 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
12600 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12610 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12620 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12630 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
12640 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
12650 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
12660 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12670 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12680 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
12690 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
126a0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
126b0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
126c0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
126d0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
126e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
126f0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
12700 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12710 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
12720 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
12730 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12740 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
12750 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
12760 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
12770 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
12780 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12790 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
127a0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
127b0 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
127c0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
127d0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
127e0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
127f0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
12800 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
12810 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12820 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12830 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
12840 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
12850 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
12860 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
12870 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
12880 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
12890 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
128a0 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65  cks)..        re
128b0 74 75 72 6e 20 54 69 63 6b 73 54 6f 44 61 74 65  turn TicksToDate
128c0 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74  Time(GetInt64(st
128d0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
128e0 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  etimeKind);..   
128f0 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
12900 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
12910 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
12920 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20  .JulianDay)..   
12930 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
12940 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65  teTime(GetDouble
12950 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f  (stmt, index), _
12960 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
12970 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
12980 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
12990 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
129a0 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a  ats.UnixEpoch)..
129b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
129c0 6e 69 78 45 70 6f 63 68 54 6f 44 61 74 65 54 69  nixEpochToDateTi
129d0 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  me(GetInt64(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 0d 0a 23 69 66  imeKind);....#if
12a00 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12a10 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
12a20 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
12a30 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
12a40 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12a50 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
12a60 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(s
12a70 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
12a80 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
12a90 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
12aa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
12ab0 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e  DateTime(UnsafeN
12ac0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12ad0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
12ae0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
12af0 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20  mt, index),..   
12b00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12b10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12b20 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
12b30 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
12b40 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69   index));..#endi
12b50 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
12b60 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12b70 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  e long GetBytes(
12b80 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
12b90 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
12ba0 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
12bb0 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
12bc0 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
12bd0 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
12be0 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
12bf0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12c00 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12c10 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
12c20 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12c30 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  dex);....      /
12c40 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
12c50 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
12c60 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
12c70 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
12c80 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
12c90 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
12ca0 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
12cb0 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
12cc0 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12cd0 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
12ce0 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
12cf0 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
12d00 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
12d10 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
12d20 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
12d30 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
12d40 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
12d50 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
12d60 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
12d70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
12d80 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
12d90 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12da0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
12db0 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  b(stmt._sqlite_s
12dc0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
12dd0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
12de0 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
12df0 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
12e00 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
12e10 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
12e20 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
12e30 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
12e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
12e50 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
12e60 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
12e70 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
12e80 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12e90 6c 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20  l override char 
12ea0 47 65 74 43 68 61 72 28 53 51 4c 69 74 65 53 74  GetChar(SQLiteSt
12eb0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12ec0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12ed0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
12ee0 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 47 65 74  nvert.ToChar(Get
12ef0 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  UInt16(stmt, ind
12f00 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
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 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
12f30 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
12f40 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
12f50 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
12f60 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
12f70 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
12f80 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
12f90 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
12fa0 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
12fb0 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
12fc0 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
12fd0 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
12fe0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
12ff0 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
13000 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
13010 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
13020 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
13030 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
13040 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
13050 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
13060 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
13070 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
13080 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
13090 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
130a0 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
130b0 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
130c0 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
130d0 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
130e0 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
130f0 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
13100 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
13110 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
13120 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
13130 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
13140 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
13150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13160 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
13170 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
13180 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
13190 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
131a0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
131b0 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
131c0 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
131d0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
131e0 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
131f0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13200 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
13210 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
13220 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
13230 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13240 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13250 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
13260 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
13270 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
13280 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13290 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
132a0 65 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  e CreateFunction
132b0 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74  (string strFunct
132c0 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20  ion, int nArgs, 
132d0 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  bool needCollSeq
132e0 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
132f0 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c   func, SQLiteCal
13300 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20  lback funcstep, 
13310 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
13320 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 2c 20 62  ack funcfinal, b
13330 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
13340 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
13350 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
13360 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13370 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
13380 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
13390 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
133a0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
133b0 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
133c0 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
133d0 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74   nArgs, 4, IntPt
133e0 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
133f0 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
13400 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
13410 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
13420 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
13430 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13440 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
13450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13460 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
13470 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
13480 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
13490 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
134a0 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
134b0 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
134c0 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
134d0 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
134e0 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
134f0 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
13500 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13510 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
13520 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
13530 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
13540 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
13550 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
13560 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
13570 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
13580 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
13590 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
135a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
135b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
135c0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
135d0 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
135e0 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
135f0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
13600 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
13610 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69  ncfinal);..#endi
13620 66 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e  f..      if (can
13630 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53  Throw && (n != S
13640 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
13650 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  k)) throw new SQ
13660 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
13670 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
13680 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
13690 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  n;..    }....   
136a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
136b0 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
136c0 64 65 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69  de CreateCollati
136d0 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c  on(string strCol
136e0 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f  lation, SQLiteCo
136f0 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51  llation func, SQ
13700 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
13710 6e 63 31 36 2c 20 62 6f 6f 6c 20 63 61 6e 54 68  nc16, bool canTh
13720 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  row)..    {..   
13730 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13740 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
13750 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13760 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
13770 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
13780 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
13790 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  2, IntPtr.Zero, 
137a0 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20  func16);..      
137b0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
137c0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
137d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
137e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
137f0 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73  ate_collation(_s
13800 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f  ql, ToUTF8(strCo
13810 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74  llation), 1, Int
13820 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b  Ptr.Zero, func);
13830 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e 54  ..      if (canT
13840 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51  hrow && (n != SQ
13850 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
13860 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  )) throw new SQL
13870 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
13880 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
13890 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
138a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
138b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
138c0 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  e int ContextCol
138d0 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
138e0 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
138f0 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
13900 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
13910 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20  , string s2)..  
13920 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
13930 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13940 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20   byte[] b1;..   
13950 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20     byte[] b2;.. 
13960 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74       System.Text
13970 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  .Encoding conver
13980 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ter = null;.... 
13990 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63       switch (enc
139a0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
139b0 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
139c0 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
139d0 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8:..          
139e0 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
139f0 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
13a00 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
13a10 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
13a20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
13a30 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
13a40 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16LE:..         
13a50 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
13a60 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
13a70 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  g.Unicode;..    
13a80 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
13a90 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
13aa0 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
13ab0 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20  .UTF16BE:..     
13ac0 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
13ad0 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
13ae0 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55  oding.BigEndianU
13af0 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
13b00 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13b10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d   }....      b1 =
13b20 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
13b30 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20  tes(s1);..      
13b40 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b2 = converter.G
13b50 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a  etBytes(s2);....
13b60 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
13b70 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13b80 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
13b90 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74  _collcompare_int
13ba0 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31  erop(context, b1
13bb0 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c  , b1.Length, b2,
13bc0 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65   b2.Length);..#e
13bd0 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
13be0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
13bf0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
13c00 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13c10 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13c20 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
13c30 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
13c40 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
13c50 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
13c60 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61  Ptr context, cha
13c70 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63  r[] c1, char[] c
13c80 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
13c90 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
13ca0 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
13cb0 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
13cc0 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
13cd0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
13ce0 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
13cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
13d00 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
13d10 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
13d20 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13d30 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
13d40 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
13d50 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
13d60 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
13d70 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
13d80 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
13d90 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
13da0 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
13db0 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
13dc0 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
13dd0 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
13de0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
13df0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
13e00 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
13e10 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
13e20 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
13e30 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
13e40 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
13e50 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
13e60 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
13e70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
13e80 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
13e90 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a  .GetBytes(c1);..
13ea0 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
13eb0 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32  rter.GetBytes(c2
13ec0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
13ed0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
13ee0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
13ef0 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
13f00 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
13f10 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
13f20 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
13f30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
13f40 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
13f50 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
13f60 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
13f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13f80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f  rnal override Co
13f90 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
13fa0 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
13fb0 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
13fc0 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
13fd0 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
13fe0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13ff0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f  ANDARD..      Co
14000 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
14010 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74  seq = new Collat
14020 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a  ionSequence();..
14030 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
14040 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79  0;..      int ty
14050 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  pe = 0;..      i
14060 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  nt enc = 0;..   
14070 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
14080 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14090 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
140a0 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
140b0 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 74  p(context, ref t
140c0 79 70 65 2c 20 72 65 66 20 65 6e 63 2c 20 72 65  ype, ref enc, re
140d0 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  f len);....     
140e0 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20   if (p != null) 
140f0 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54  seq.Name = UTF8T
14100 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
14110 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70 65  ..      seq.Type
14120 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70   = (CollationTyp
14130 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20  eEnum)type;..   
14140 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66     seq._func = f
14150 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  unc;..      seq.
14160 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c  Encoding = (Coll
14170 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
14180 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  m)enc;....      
14190 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c  return seq;..#el
141a0 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
141b0 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
141c0 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
141d0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
141e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
141f0 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
14200 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49  aramValueBytes(I
14210 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61  ntPtr p, int nDa
14220 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
14230 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
14240 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
14250 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
14260 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
14270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14280 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
14290 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  s(p);....      /
142a0 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
142b0 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
142c0 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
142d0 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
142e0 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
142f0 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
14300 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
14310 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
14320 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
14330 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
14340 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
14350 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
14360 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
14370 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
14380 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
14390 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
143a0 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
143b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
143c0 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
143d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
143e0 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
143f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14400 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62  lite3_value_blob
14410 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (p);....        
14420 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
14430 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
14440 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
14450 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
14460 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
14470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
14480 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
14490 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
144a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
144b0 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
144c0 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
144d0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
144e0 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72  de double GetPar
144f0 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e  amValueDouble(In
14500 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
14510 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
14520 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
14530 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
14540 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14550 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
14560 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23  _double(ptr);..#
14570 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
14580 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75  NDARD..      dou
14590 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b  ble value = 0.0;
145a0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
145b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
145c0 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
145d0 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65  _interop(ptr, re
145e0 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
145f0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
14600 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
14610 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
14620 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
14630 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
14640 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14650 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
14660 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32  tParamValueInt32
14670 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14680 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
14690 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
146a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
146b0 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20  lue_int(ptr);.. 
146c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
146d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
146e0 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
146f0 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72  Int64(IntPtr ptr
14700 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
14710 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
14720 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
14730 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
14740 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14750 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70  e3_value_int64(p
14760 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  tr);..#elif !SQL
14770 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
14780 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 20      Int64 value 
14790 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  = 0;..      Unsa
147a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
147b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
147c0 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  t64_interop(ptr,
147d0 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
147e0 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
147f0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14800 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
14810 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
14820 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
14830 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14840 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
14850 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ing GetParamValu
14860 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74 72  eText(IntPtr ptr
14870 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
14880 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
14890 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
148a0 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
148b0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
148c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
148d0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
148e0 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72  text_interop(ptr
148f0 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
14900 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14910 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
14920 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
14930 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14940 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c  value_text(ptr),
14950 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
14960 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14970 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
14980 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66  s(ptr));..#endif
14990 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
149a0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
149b0 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
149c0 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
149d0 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
149e0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
149f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14a00 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
14a10 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20  ue_type(ptr);.. 
14a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
14a30 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14a40 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
14a50 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
14a60 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
14a70 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
14a80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14a90 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
14aa0 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  b(context, value
14ab0 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20  , value.Length, 
14ac0 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
14ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14ae0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
14af0 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65  oid ReturnDouble
14b00 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
14b10 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
14b20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
14b30 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
14b40 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
14b50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14b60 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
14b70 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
14b80 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
14b90 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
14ba0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14bb0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14bc0 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
14bd0 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
14be0 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
14bf0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
14c00 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
14c10 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
14c20 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
14c30 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14c40 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
14c50 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72  turnError(IntPtr
14c60 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
14c70 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
14c80 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
14c90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14ca0 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
14cb0 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
14cc0 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e  alue), value.Len
14cd0 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
14ce0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14cf0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14d00 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f  nInt32(IntPtr co
14d10 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65  ntext, int value
14d20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14d30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14d40 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
14d50 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
14d60 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
14d70 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14d80 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14d90 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20  urnInt64(IntPtr 
14da0 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61  context, long va
14db0 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
14dc0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
14dd0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
14de0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14df0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
14e00 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
14e10 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
14e20 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
14e30 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
14e40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14e50 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
14e60 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
14e70 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
14e80 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14e90 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
14ea0 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
14eb0 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
14ec0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14ed0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14ee0 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74  d ReturnNull(Int
14ef0 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
14f00 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
14f10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14f20 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
14f30 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
14f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14f50 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14f60 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74  d ReturnText(Int
14f70 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
14f80 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
14f90 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  {..      byte[] 
14fa0 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
14fb0 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  );..      Unsafe
14fc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14fd0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
14fe0 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  t(context, ToUTF
14ff0 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67  8(value), b.Leng
15000 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
15010 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
15020 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
15030 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
15040 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15050 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
15060 73 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  s the file name 
15070 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69  of the native li
15080 62 72 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  brary containing
15090 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20   the native..   
150a0 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20 65 78   /// "vtshim" ex
150b0 74 65 6e 73 69 6f 6e 20 2d 41 4e 44 2d 20 77 68  tension -AND- wh
150c0 65 74 68 65 72 20 69 74 20 73 68 6f 75 6c 64 20  ether it should 
150d0 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c  be dynamically l
150e0 6f 61 64 65 64 20 62 79 0d 0a 20 20 20 20 2f 2f  oaded by..    //
150f0 2f 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  / this class... 
15100 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15110 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15120 6d 20 6e 61 6d 65 3d 22 69 73 4c 6f 61 64 4e 65  m name="isLoadNe
15130 65 64 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  eded">..    /// 
15140 54 68 69 73 20 6f 75 74 70 75 74 20 70 61 72 61  This output para
15150 6d 65 74 65 72 20 77 69 6c 6c 20 62 65 20 73 65  meter will be se
15160 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  t to non-zero if
15170 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 6e 61   the returned na
15180 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69  tive..    /// li
15190 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 20  brary file name 
151a0 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61 6d 69  should be dynami
151b0 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 70 72 69  cally loaded pri
151c0 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 69 6e 67  or to attempting
151d0 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 72  ..    /// the cr
151e0 65 61 74 69 6f 6e 20 6f 66 20 6e 61 74 69 76 65  eation of native
151f0 20 64 69 73 70 6f 73 61 62 6c 65 20 65 78 74 65   disposable exte
15200 6e 73 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0d 0a  nsion modules...
15210 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15220 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
15230 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
15240 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68   file name of th
15250 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
15260 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15270 6e 61 74 69 76 65 20 22 76 74 73 68 69 6d 22 0d  native "vtshim".
15280 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69  .    /// extensi
15290 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20  on -OR- null if 
152a0 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74  it cannot be det
152b0 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  ermined...    //
152c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
152d0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
152e0 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f   GetShimExtensio
152f0 6e 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  nFileName(..    
15300 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 69 73 4c      ref bool isL
15310 6f 61 64 4e 65 65 64 65 64 20 2f 2a 20 6f 75 74  oadNeeded /* out
15320 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a   */..        )..
15330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
15340 66 20 28 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65  f (_shimIsLoadNe
15350 65 64 65 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  eded != null).. 
15360 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61             isLoa
15370 64 4e 65 65 64 65 64 20 3d 20 28 62 6f 6f 6c 29  dNeeded = (bool)
15380 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65  _shimIsLoadNeede
15390 64 3b 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65  d;..        else
153a0 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 54 41  ..#if SQLITE_STA
153b0 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54  NDARD || USE_INT
153c0 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54  EROP_DLL || PLAT
153d0 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
153e0 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
153f0 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20     isLoadNeeded 
15400 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  = HelperMethods.
15410 49 73 57 69 6e 64 6f 77 73 28 29 3b 20 2f 2a 20  IsWindows(); /* 
15420 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65  COMPAT */..#else
15430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
15440 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61 6c  LoadNeeded = fal
15450 73 65 3b 20 2f 2a 20 6d 69 78 65 64 2d 6d 6f 64  se; /* mixed-mod
15460 65 20 61 73 73 65 6d 62 6c 79 20 2a 2f 0d 0a 23  e assembly */..#
15470 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
15480 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
15490 20 3d 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f   = _shimExtensio
154a0 6e 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  nFileName;....  
154b0 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
154c0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
154d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
154e0 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 23 69 66  fileName;....#if
154f0 20 28 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   (SQLITE_STANDAR
15500 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50  D || USE_INTEROP
15510 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d  _DLL || PLATFORM
15520 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
15530 4b 29 20 26 26 20 50 52 45 4c 4f 41 44 5f 4e 41  K) && PRELOAD_NA
15540 54 49 56 45 5f 4c 49 42 52 41 52 59 0d 0a 20 20  TIVE_LIBRARY..  
15550 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
15560 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15570 2e 47 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72  .GetNativeLibrar
15580 79 46 69 6c 65 4e 61 6d 65 4f 6e 6c 79 28 29 3b  yFileNameOnly();
15590 20 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23   /* COMPAT */..#
155a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65  else..        re
155b0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  turn null;..#end
155c0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
155d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
155e0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
155f0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
15600 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
15610 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65 20  order to create 
15620 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20  a disposable..  
15630 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e    /// module con
15640 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
15650 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
15660 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
15670 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15680 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15690 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
156a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
156b0 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20  odule object to 
156c0 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65  be used when cre
156d0 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  ating the native
156e0 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75   disposable modu
156f0 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
15700 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15710 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
15720 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
15730 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61   flags for the a
15740 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63  ssociated <see c
15750 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
15760 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
15770 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
15780 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15790 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
157a0 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d  ide void CreateM
157b0 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
157c0 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
157d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
157e0 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
157f0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15800 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
15810 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15820 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
15830 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
15840 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
15850 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
15860 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 28 66 6c 61  .NoLogModule(fla
15870 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
15880 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
15890 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20  ule.LogErrors = 
158a0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
158b0 67 4d 6f 64 75 6c 65 45 72 72 6f 72 28 66 6c 61  gModuleError(fla
158c0 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
158d0 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65    module.LogExce
158e0 70 74 69 6f 6e 73 20 3d 20 48 65 6c 70 65 72 4d  ptions = HelperM
158f0 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75 6c 65  ethods.LogModule
15900 45 78 63 65 70 74 69 6f 6e 28 66 6c 61 67 73 29  Exception(flags)
15910 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
15920 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
15930 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15940 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15950 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
15960 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  ("connection has
15970 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
15980 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
15990 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65 64   bool isLoadNeed
159a0 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ed = false;..   
159b0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
159c0 4e 61 6d 65 20 3d 20 47 65 74 53 68 69 6d 45 78  Name = GetShimEx
159d0 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 28  tensionFileName(
159e0 72 65 66 20 69 73 4c 6f 61 64 4e 65 65 64 65 64  ref isLoadNeeded
159f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
15a00 20 28 69 73 4c 6f 61 64 4e 65 65 64 65 64 29 0d   (isLoadNeeded).
15a10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15a20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65          if (file
15a30 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15a50 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
15a60 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 66 69  xception("the fi
15a70 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the 
15a80 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74 65 6e  \"vtshim\" exten
15a90 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e 22  sion is unknown"
15aa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ab0 20 20 69 66 20 28 5f 73 68 69 6d 45 78 74 65 6e    if (_shimExten
15ac0 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 3d 20  sionProcName == 
15ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15ae0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15af0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
15b00 28 22 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  ("the entry poin
15b10 74 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73 68  t for the \"vtsh
15b20 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20 69  im\" extension i
15b30 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a  s unknown");....
15b40 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 4c              SetL
15b50 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75  oadExtension(tru
15b60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
15b70 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 66   LoadExtension(f
15b80 69 6c 65 4e 61 6d 65 2c 20 5f 73 68 69 6d 45 78  ileName, _shimEx
15b90 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 29  tensionProcName)
15ba0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
15bb0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15bc0 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61  le.CreateDisposa
15bd0 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29  bleModule(_sql))
15be0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15bf0 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
15c00 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  dules == null)..
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44  _modules = new D
15c30 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
15c40 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28  , SQLiteModule>(
15c50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15c60 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d    _modules.Add(m
15c70 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75  odule.Name, modu
15c80 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
15c90 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c      if (_usePool
15ca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
15cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15cc0 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c    _usePool = fal
15cd0 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  se;....#if !NET_
15ce0 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
15cf0 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
15d20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
15d30 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
15d60 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 20    "CreateModule 
15d90 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a  (Pool) Disabled:
15da0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
15db0 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
15dc0 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
15dd0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
15de0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15df0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
15e00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15e10 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
15e20 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
15e30 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  n(GetLastError()
15e40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
15e50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15e60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
15e70 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
15e80 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
15e90 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
15ea0 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20   to cleanup the 
15eb0 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f  resources..    /
15ec0 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
15ed0 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74  th a module cont
15ee0 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65  aining the imple
15ef0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76  mentation of a v
15f00 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
15f10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15f20 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15f30 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
15f40 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f  ..    /// The mo
15f50 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76  dule object prev
15f60 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f  iously passed to
15f70 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
15f80 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  CreateModule" />
15f90 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64  ..    /// method
15fa0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15fb0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15fc0 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
15fd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
15fe0 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
15ff0 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
16000 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
16010 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
16020 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
16030 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16040 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
16050 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f  e void DisposeMo
16060 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c  dule(SQLiteModul
16070 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65  e module, SQLite
16080 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
16090 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  flags)..    {.. 
160a0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
160b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
160c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
160d0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
160e0 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22  ception("module"
160f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f  );....        mo
16100 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  dule.Dispose();.
16110 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
16120 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16130 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41  verride IntPtr A
16140 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28  ggregateContext(
16150 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
16160 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
16170 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
16180 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
16190 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65  _aggregate_conte
161a0 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d  xt(context, 1);.
161b0 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
161c0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
161d0 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
161e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
161f0 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
16200 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
16210 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
16220 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
16230 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
16240 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  / in response to
16250 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
16260 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
16270 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
16280 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20  xCreate" />..   
16290 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65   /// or <see cre
162a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
162b0 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
162c0 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c   /> virtual tabl
162d0 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  e methods...    
162e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
162f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16300 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
16310 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75     /// The virtu
16320 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
16330 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65  that is to be re
16340 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68  sponsible for th
16350 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
16360 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64  .    /// being d
16370 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
16380 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16390 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
163a0 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f  "strSql">..    /
163b0 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  // The string co
163c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
163d0 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72   statement descr
163e0 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75 61  ibing the virtua
163f0 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20  l table to..    
16400 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e  /// be declared.
16410 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16420 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
16430 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
16440 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73  ..    /// Upon s
16450 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74  uccess, the cont
16460 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72  ents of this par
16470 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66  ameter are undef
16480 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c  ined.  Upon fail
16490 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74  ure,..    /// it
164a0 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
164b0 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
164c0 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
164d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
164e0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
164f0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
16500 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
16510 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
16520 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
16530 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
16540 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
16550 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72  rCode DeclareVir
16560 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20  tualTable(..    
16570 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
16580 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
16590 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c    string strSql,
165a0 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
165b0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
165c0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
165d0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
165e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
165f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16600 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74  error = "connect
16610 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
16620 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20  id handle";..   
16630 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16640 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16650 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
16660 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  }....        Int
16670 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74  Ptr pSql = IntPt
16680 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
16690 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
166a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
166b0 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69  Sql = SQLiteStri
166c0 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
166d0 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b  mString(strSql);
166e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
166f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16700 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
16710 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16720 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20  declare_vtab(.. 
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
16740 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20  sql, pSql);.... 
16750 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
16760 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
16770 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64  Code.Ok) && (mod
16780 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ule != null)).. 
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
167a0 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d  odule.Declared =
167b0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
167c0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
167d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
167e0 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61  k) error = GetLa
167f0 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20  stError();....  
16800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16810 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   n;..        }..
16820 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
16830 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16840 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71 6c          if (pSql
16850 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
16860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
16870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16880 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
16890 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20  ee(pSql);..     
168a0 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
168b0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
168c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
168d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
168e0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
168f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
16900 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
16910 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
16920 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64  ry in order to d
16930 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c  eclare a virtual
16940 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
16950 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70  function in resp
16960 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69  onse to a call i
16970 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65  nto the <see cre
16980 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
16990 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
169a0 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c  />..    /// or <
169b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
169c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
169d0 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75  onnect" /> virtu
169e0 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73  al table methods
169f0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
16a00 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
16a10 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
16a20 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
16a30 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
16a40 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74  module that is t
16a50 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65  o be responsible
16a60 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
16a70 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
16a80 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
16a90 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
16aa0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16ab0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16ac0 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e  "argumentCount">
16ad0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
16ae0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
16af0 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  s to the functio
16b00 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
16b10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
16b20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
16b30 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
16b40 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
16b50 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
16b60 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
16b70 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
16b80 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
16b90 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
16ba0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e  ">..    /// Upon
16bb0 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f   success, the co
16bc0 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70  ntents of this p
16bd0 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64  arameter are und
16be0 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61  efined.  Upon fa
16bf0 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ilure,..    /// 
16c00 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  it should contai
16c10 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  n an appropriate
16c20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d   error message..
16c30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16c40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
16c50 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
16c60 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
16c70 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
16c80 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
16c90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16ca0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
16cb0 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56  rorCode DeclareV
16cc0 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d  irtualFunction(.
16cd0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
16ce0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
16cf0 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d         int argum
16d00 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  entCount,..     
16d10 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
16d20 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
16d30 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
16d40 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
16d50 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
16d60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16d70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  {..            e
16d80 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69  rror = "connecti
16d90 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
16da0 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20  d handle";..    
16db0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
16dc0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
16dd0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
16de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
16df0 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74  tr pName = IntPt
16e00 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
16e10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
16e20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
16e30 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
16e40 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
16e50 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d  omString(name);.
16e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
16e70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
16e80 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
16e90 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
16ea0 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e  verload_function
16eb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16ec0 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20     _sql, pName, 
16ed0 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d  argumentCount);.
16ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
16ef0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
16f00 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f  rorCode.Ok) erro
16f10 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72  r = GetLastError
16f20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
16f30 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
16f40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16f50 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
16f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16f70 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e   if (pName != In
16f80 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
16f90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16fa0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16fb0 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61  eMemory.Free(pNa
16fc0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
16fd0 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e        pName = In
16fe0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
16ff0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17000 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e     }..    }..#en
17010 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  dif....    /// <
17020 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
17030 2f 20 42 75 69 6c 64 73 20 61 6e 20 65 72 72 6f  / Builds an erro
17040 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
17050 20 66 72 61 67 6d 65 6e 74 20 63 6f 6e 74 61 69   fragment contai
17060 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 2f 2f  ning the..    //
17070 2f 20 64 65 66 69 6e 65 64 20 76 61 6c 75 65 73  / defined values
17080 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   of the <see cre
17090 66 3d 22 53 51 4c 69 74 65 53 74 61 74 75 73 4f  f="SQLiteStatusO
170a0 70 73 45 6e 75 6d 22 20 2f 3e 0d 0a 20 20 20 20  psEnum" />..    
170b0 2f 2f 2f 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e  /// enumeration.
170c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
170d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
170e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
170f0 20 54 68 65 20 62 75 69 6c 74 20 73 74 72 69 6e   The built strin
17100 67 20 66 72 61 67 6d 65 6e 74 2e 0d 0a 20 20 20  g fragment...   
17110 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
17120 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
17130 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
17140 61 74 75 73 44 62 4f 70 73 4e 61 6d 65 73 28 29  atusDbOpsNames()
17150 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
17160 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62   StringBuilder b
17170 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53 74 72  uilder = new Str
17180 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d  ingBuilder();...
17190 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
171a0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
171b0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
171c0 20 28 73 74 72 69 6e 67 20 6e 61 6d 65 20 69 6e   (string name in
171d0 20 45 6e 75 6d 2e 47 65 74 4e 61 6d 65 73 28 0d   Enum.GetNames(.
171e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171f0 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 53 74   typeof(SQLiteSt
17200 61 74 75 73 4f 70 73 45 6e 75 6d 29 29 29 0d 0a  atusOpsEnum)))..
17210 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17220 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
17230 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
17240 6e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  name))..        
17250 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17270 20 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65 6e   if (builder.Len
17280 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
17290 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
172a0 72 2e 41 70 70 65 6e 64 28 22 2c 20 22 29 3b 0d  r.Append(", ");.
172b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
172c0 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6e 61  uilder.Append(na
172d0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
172e0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
172f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  //..        // T
17300 4f 44 4f 3a 20 55 70 64 61 74 65 20 74 68 69 73  ODO: Update this
17310 20 6c 69 73 74 20 69 66 20 74 68 65 20 61 76 61   list if the ava
17320 69 6c 61 62 6c 65 20 76 61 6c 75 65 73 20 69 6e  ilable values in
17330 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
17340 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 43 6f         "SQLiteCo
17350 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 22 20 65  nfigDbOpsEnum" e
17360 6e 75 6d 65 72 61 74 69 6f 6e 20 63 68 61 6e 67  numeration chang
17370 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  e...        //..
17380 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
17390 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 43 75 6c  AppendFormat(Cul
173a0 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
173b0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
173c0 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 7b 31          "{0}, {1
173d0 7d 2c 20 7b 32 7d 2c 20 7b 33 7d 2c 20 7b 34 7d  }, {2}, {3}, {4}
173e0 2c 20 7b 35 7d 2c 20 7b 36 7d 2c 20 7b 37 7d 2c  , {5}, {6}, {7},
173f0 20 7b 38 7d 2c 20 7b 39 7d 2c 20 7b 31 30 7d 2c   {8}, {9}, {10},
17400 20 7b 31 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20   {11}",..       
17410 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75       SQLiteStatu
17420 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  sOpsEnum.SQLITE_
17430 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
17440 44 45 5f 55 53 45 44 2c 0d 0a 20 20 20 20 20 20  DE_USED,..      
17450 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
17460 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
17470 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
17480 55 53 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20  USED,..         
17490 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f     SQLiteStatusO
174a0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
174b0 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f 55 53  STATUS_SCHEMA_US
174c0 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ED,..           
174d0 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73   SQLiteStatusOps
174e0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54  Enum.SQLITE_DBST
174f0 41 54 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 0d  ATUS_STMT_USED,.
17500 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17510 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
17520 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53  .SQLITE_DBSTATUS
17530 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0d  _LOOKASIDE_HIT,.
17540 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17550 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
17560 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53  .SQLITE_DBSTATUS
17570 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f  _LOOKASIDE_MISS_
17580 53 49 5a 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  SIZE,..         
17590 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f     SQLiteStatusO
175a0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
175b0 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45  STATUS_LOOKASIDE
175c0 5f 4d 49 53 53 5f 46 55 4c 4c 2c 0d 0a 20 20 20  _MISS_FULL,..   
175d0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
175e0 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c  tatusOpsEnum.SQL
175f0 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
17600 48 45 5f 48 49 54 2c 0d 0a 20 20 20 20 20 20 20  HE_HIT,..       
17610 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75       SQLiteStatu
17620 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  sOpsEnum.SQLITE_
17630 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 4d  DBSTATUS_CACHE_M
17640 49 53 53 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ISS,..          
17650 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70    SQLiteStatusOp
17660 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53  sEnum.SQLITE_DBS
17670 54 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49 54  TATUS_CACHE_WRIT
17680 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
17690 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
176a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
176b0 54 55 53 5f 44 45 46 45 52 52 45 44 5f 46 4b 53  TUS_DEFERRED_FKS
176c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
176d0 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e  QLiteStatusOpsEn
176e0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54  um.SQLITE_DBSTAT
176f0 55 53 5f 43 41 43 48 45 5f 55 53 45 44 5f 53 48  US_CACHE_USED_SH
17700 41 52 45 44 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ARED);..#endif..
17710 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
17720 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e   builder.ToStrin
17730 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g();..    }.... 
17740 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17750 0d 0a 20 20 20 20 2f 2f 2f 20 42 75 69 6c 64 73  ..    /// Builds
17760 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
17770 65 20 73 74 72 69 6e 67 20 66 72 61 67 6d 65 6e  e string fragmen
17780 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
17790 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 69 6e 65  ..    /// define
177a0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
177b0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
177c0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
177d0 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e  " />..    /// en
177e0 75 6d 65 72 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  umeration...    
177f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17800 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
17810 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62  >..    /// The b
17820 75 69 6c 74 20 73 74 72 69 6e 67 20 66 72 61 67  uilt string frag
17830 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ment...    /// <
17840 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
17850 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
17860 72 69 6e 67 20 47 65 74 43 6f 6e 66 69 67 44 62  ring GetConfigDb
17870 4f 70 73 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20  OpsNames()..    
17880 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  {..        Strin
17890 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
178a0 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
178b0 6c 64 65 72 28 29 3b 0d 0a 0d 0a 23 69 66 20 21  lder();....#if !
178c0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
178d0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
178e0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
178f0 6e 67 20 6e 61 6d 65 20 69 6e 20 45 6e 75 6d 2e  ng name in Enum.
17900 47 65 74 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20  GetNames(..     
17910 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
17920 66 28 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  f(SQLiteConfigDb
17930 4f 70 73 45 6e 75 6d 29 29 29 0d 0a 20 20 20 20  OpsEnum)))..    
17940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17950 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
17960 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6e 61 6d 65  NullOrEmpty(name
17970 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17980 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
17990 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
179a0 28 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20  (builder.Length 
179b0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
179c0 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
179d0 70 65 6e 64 28 22 2c 20 22 29 3b 0d 0a 0d 0a 20  pend(", ");.... 
179e0 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
179f0 65 72 2e 41 70 70 65 6e 64 28 6e 61 6d 65 29 3b  er.Append(name);
17a00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6c  ..        }..#el
17a10 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  se..        //..
17a20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
17a30 20 55 70 64 61 74 65 20 74 68 69 73 20 6c 69 73   Update this lis
17a40 74 20 69 66 20 74 68 65 20 61 76 61 69 6c 61 62  t if the availab
17a50 6c 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  le values in the
17a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
17a70 20 20 20 22 53 51 4c 69 74 65 43 6f 6e 66 69 67     "SQLiteConfig
17a80 44 62 4f 70 73 45 6e 75 6d 22 20 65 6e 75 6d 65  DbOpsEnum" enume
17a90 72 61 74 69 6f 6e 20 63 68 61 6e 67 65 2e 0d 0a  ration change...
17aa0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
17ab0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
17ac0 6e 64 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ndFormat(Culture
17ad0 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
17ae0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
17af0 20 20 20 20 22 7b 30 7d 2c 20 7b 31 7d 2c 20 7b      "{0}, {1}, {
17b00 32 7d 2c 20 7b 33 7d 2c 20 7b 34 7d 2c 20 7b 35  2}, {3}, {4}, {5
17b10 7d 2c 20 7b 36 7d 2c 20 7b 37 7d 2c 20 7b 38 7d  }, {6}, {7}, {8}
17b20 2c 20 7b 39 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {9}",..       
17b30 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
17b40 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
17b50 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 4e 45 2c  E_DBCONFIG_NONE,
17b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17b70 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17b80 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
17b90 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45 2c 0d  FIG_MAINDBNAME,.
17ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17bb0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
17bc0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
17bd0 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 0d 0a 20  IG_LOOKASIDE,.. 
17be0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17bf0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17c00 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
17c10 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c 0d 0a 20  _ENABLE_FKEY,.. 
17c20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17c30 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17c40 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
17c50 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45 52 2c  _ENABLE_TRIGGER,
17c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17c70 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17c80 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
17c90 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f  FIG_ENABLE_FTS3_
17ca0 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20 20 20 20  TOKENIZER,..    
17cb0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
17cc0 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
17cd0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
17ce0 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  ABLE_LOAD_EXTENS
17cf0 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ION,..          
17d00 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
17d10 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17d20 42 43 4f 4e 46 49 47 5f 4e 4f 5f 43 4b 50 54 5f  BCONFIG_NO_CKPT_
17d30 4f 4e 5f 43 4c 4f 53 45 2c 0d 0a 20 20 20 20 20  ON_CLOSE,..     
17d40 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17d50 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17d60 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
17d70 42 4c 45 5f 51 50 53 47 2c 0d 0a 20 20 20 20 20  BLE_QPSG,..     
17d80 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17d90 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17da0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52 49  ITE_DBCONFIG_TRI
17db0 47 47 45 52 5f 45 51 50 29 3b 0d 0a 23 65 6e 64  GGER_EQP);..#end
17dc0 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
17dd0 74 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53  turn builder.ToS
17de0 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
17df0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17e00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
17e10 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65 6e  turns the curren
17e20 74 20 61 6e 64 2f 6f 72 20 68 69 67 68 77 61 74  t and/or highwat
17e30 65 72 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  er values for th
17e40 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
17e50 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 73 74   /// database st
17e60 61 74 75 73 20 70 61 72 61 6d 65 74 65 72 2e 0d  atus parameter..
17e70 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
17e80 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
17e90 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e  ram name="option
17ea0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
17eb0 64 61 74 61 62 61 73 65 20 73 74 61 74 75 73 20  database status 
17ec0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 71 75 65  parameter to que
17ed0 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ry...    /// </p
17ee0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
17ef0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
17f00 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
17f10 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74  -zero to reset t
17f20 68 65 20 68 69 67 68 77 61 74 65 72 20 76 61 6c  he highwater val
17f30 75 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ue to the curren
17f40 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  t value...    //
17f50 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
17f60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17f70 22 63 75 72 72 65 6e 74 22 3e 0d 0a 20 20 20 20  "current">..    
17f80 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63 61 62 6c  /// If applicabl
17f90 65 2c 20 72 65 63 65 69 76 65 73 20 74 68 65 20  e, receives the 
17fa0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2e 0d 0a  current value...
17fb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
17fc0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17fd0 20 6e 61 6d 65 3d 22 68 69 67 68 77 61 74 65 72   name="highwater
17fe0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 61  ">..    /// If a
17ff0 70 70 6c 69 63 61 62 6c 65 2c 20 72 65 63 65 69  pplicable, recei
18000 76 65 73 20 74 68 65 20 68 69 67 68 77 61 74 65  ves the highwate
18010 72 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  r value...    //
18020 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18030 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
18040 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
18050 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
18060 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
18070 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18080 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18090 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
180a0 20 47 65 74 53 74 61 74 75 73 50 61 72 61 6d 65   GetStatusParame
180b0 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ter(..        SQ
180c0 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
180d0 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  m option,..     
180e0 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a     bool reset,..
180f0 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 74 20          ref int 
18100 63 75 72 72 65 6e 74 2c 0d 0a 20 20 20 20 20 20  current,..      
18110 20 20 72 65 66 20 69 6e 74 20 68 69 67 68 77 61    ref int highwa
18120 74 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ter..        )..
18130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
18140 66 20 28 21 45 6e 75 6d 2e 49 73 44 65 66 69 6e  f (!Enum.IsDefin
18150 65 64 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  ed(typeof(SQLite
18160 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 29 2c 20  StatusOpsEnum), 
18170 6f 70 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  option))..      
18180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18190 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
181a0 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65  eException(Helpe
181b0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
181c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
181d0 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
181e0 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
181f0 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
18200 20 20 20 20 20 22 75 6e 72 65 63 6f 67 6e 69 7a       "unrecogniz
18210 65 64 20 73 74 61 74 75 73 20 6f 70 74 69 6f 6e  ed status option
18220 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d 22 2c  , must be: {0}",
18230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18240 20 20 47 65 74 53 74 61 74 75 73 44 62 4f 70 73    GetStatusDbOps
18250 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20 20 20 20  Names()));..    
18260 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18270 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
18280 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18290 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 0d 0a  te3_db_status(..
182a0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
182b0 2c 20 6f 70 74 69 6f 6e 2c 20 72 65 66 20 63 75  , option, ref cu
182c0 72 72 65 6e 74 2c 20 72 65 66 20 68 69 67 68 77  rrent, ref highw
182d0 61 74 65 72 2c 20 72 65 73 65 74 20 3f 20 31 20  ater, reset ? 1 
182e0 3a 20 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  : 0);..    }....
182f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18300 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 68 61 6e 67  >..    /// Chang
18310 65 20 61 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e a configuratio
18320 6e 20 6f 70 74 69 6f 6e 20 76 61 6c 75 65 20 66  n option value f
18330 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  or the database.
18340 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
18350 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
18360 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
18370 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18380 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f  option">..    //
18390 2f 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  / The database 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 74 6f 20 63 68 61 6e 67 65 2e 0d 0a  ion to change...
183c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
183d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
183e0 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
183f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20      /// The new 
18400 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 73 70  value for the sp
18410 65 63 69 66 69 65 64 20 63 6f 6e 66 69 67 75 72  ecified configur
18420 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2e 0d 0a 20  ation option... 
18430 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
18440 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
18450 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
18460 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
18470 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
18480 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
18490 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
184a0 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
184b0 72 43 6f 64 65 20 53 65 74 43 6f 6e 66 69 67 75  rCode SetConfigu
184c0 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20  rationOption(.. 
184d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
184e0 66 69 67 44 62 4f 70 73 45 6e 75 6d 20 6f 70 74  figDbOpsEnum opt
184f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62  ion,..        ob
18500 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
18510 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
18520 20 20 20 20 20 20 69 66 20 28 21 45 6e 75 6d 2e        if (!Enum.
18530 49 73 44 65 66 69 6e 65 64 28 74 79 70 65 6f 66  IsDefined(typeof
18540 28 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f  (SQLiteConfigDbO
18550 70 73 45 6e 75 6d 29 2c 20 6f 70 74 69 6f 6e 29  psEnum), option)
18560 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18570 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18580 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
18590 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
185a0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
185b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
185c0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
185d0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
185f0 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e 66  nrecognized conf
18600 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
18610 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d 22 2c  , must be: {0}",
18620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18630 20 20 47 65 74 43 6f 6e 66 69 67 44 62 4f 70 73    GetConfigDbOps
18640 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20 20 20 20  Names()));..    
18650 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18660 20 73 77 69 74 63 68 20 28 6f 70 74 69 6f 6e 29   switch (option)
18670 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18680 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
18690 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
186a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
186b0 46 49 47 5f 4e 4f 4e 45 3a 20 2f 2f 20 6e 69 6c  FIG_NONE: // nil
186c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
186e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 6e 6f 74   // NOTE: Do not
18710 68 69 6e 67 2c 20 72 65 74 75 72 6e 20 73 75 63  hing, return suc
18720 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
18730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
18760 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
18790 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44  se SQLiteConfigD
187a0 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
187b0 44 42 43 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e  DBCONFIG_MAINDBN
187c0 41 4d 45 3a 20 2f 2f 20 63 68 61 72 2a 0d 0a 20  AME: // char*.. 
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
187e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
187f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
18800 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
18830 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
18840 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  n("value");.... 
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
18870 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
188a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
188b0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
188c0 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
188d0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
188e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
18900 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
18910 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
18940 61 74 69 6f 6e 20 76 61 6c 75 65 20 74 79 70 65  ation value type
18950 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20   mismatch, must 
18960 62 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c  be of type {0}",
18970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
18990 70 65 6f 66 28 73 74 72 69 6e 67 29 29 29 3b 0d  peof(string)));.
189a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
189d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
189e0 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
189f0 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
18a10 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d 20  ntPtr pDbName = 
18a20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20          pDbName 
18a80 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
18a90 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
18aa0 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 29    (string)value)
18ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18af0 28 70 44 62 4e 61 6d 65 20 3d 3d 20 49 6e 74 50  (pDbName == IntP
18b00 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
18b50 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  eException(..   
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 20 20 20 20 20 53 51 4c               SQL
18b80 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d  iteErrorCode.NoM
18b90 65 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  em,..           
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 61 6c 6c       "cannot all
18bc0 6f 63 61 74 65 20 64 61 74 61 62 61 73 65 20 6e  ocate database n
18bd0 61 6d 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame");..        
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
18c10 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
18c20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
18c30 5f 63 6f 6e 66 69 67 5f 63 68 61 72 70 74 72 28  _config_charptr(
18c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
18c60 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 70 44 62 4e  ql, option, pDbN
18c70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
18ca0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 46 72 65 65 44 62 4e 61 6d         FreeDbNam
18cf0 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  e(true);....    
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 20 20 20 20 20 20 20 20 64 62 4e 61 6d 65 20 3d          dbName =
18d20 20 70 44 62 4e 61 6d 65 3b 0d 0a 20 20 20 20 20   pDbName;..     
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d         pDbName =
18d50 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18da0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18de0 28 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72  ((rc != SQLiteEr
18df0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 0d 0a  rorCode.Ok) &&..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 28 70 44 62              (pDb
18e20 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
18e30 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
18e70 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
18e80 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  pDbName);..     
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 70 44 62 4e 61 6d 65 20 3d         pDbName =
18eb0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18f00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
18f10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18f20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18f30 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
18f40 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
18f50 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f  ITE_DBCONFIG_LOO
18f60 4b 41 53 49 44 45 3a 20 2f 2f 20 76 6f 69 64 2a  KASIDE: // void*
18f70 20 69 6e 74 20 69 6e 74 0d 0a 20 20 20 20 20 20   int int..      
18f80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 6f 62 6a 65 63 74 5b 5d 20 61 72 72 61 79 20   object[] array 
18fb0 3d 20 76 61 6c 75 65 20 61 73 20 6f 62 6a 65 63  = value as objec
18fc0 74 5b 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t[];....        
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18fe0 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  array == null)..
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19020 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19030 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
19040 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
19050 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
19080 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
19090 20 20 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 20 22 63 6f 6e 66             "conf
190b0 69 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20  iguration value 
190c0 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
190d0 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
190e0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 5b    typeof(object[
19110 5d 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ])));..         
19120 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 69 66 20 28 21 28 61 72 72 61 79 5b      if (!(array[
19150 30 5d 20 69 73 20 49 6e 74 50 74 72 29 29 0d 0a  0] is IntPtr))..
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19190 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
191a0 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
191b0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
191c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
191f0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
19200 20 20 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 20 22 63 6f 6e 66             "conf
19220 69 67 75 72 61 74 69 6f 6e 20 65 6c 65 6d 65 6e  iguration elemen
19230 74 20 7a 65 72 6f 20 28 30 29 20 74 79 70 65 20  t zero (0) type 
19240 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
19250 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
19260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
19280 65 6f 66 28 49 6e 74 50 74 72 29 29 29 3b 0d 0a  eof(IntPtr)));..
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
192c0 28 21 28 61 72 72 61 79 5b 31 5d 20 69 73 20 69  (!(array[1] is i
192d0 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nt))..          
192e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
19310 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48  QLiteException(H
19320 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
19330 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
19360 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
19370 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   "configuration 
193a0 65 6c 65 6d 65 6e 74 20 6f 6e 65 20 28 31 29 20  element one (1) 
193b0 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
193c0 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
193d0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 74 79 70 65 6f 66 28 69 6e 74 29 29 29 3b    typeof(int)));
19400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19410 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19430 66 20 28 21 28 61 72 72 61 79 5b 32 5d 20 69 73  f (!(array[2] is
19440 20 69 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20   int))..        
19450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
19480 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
19490 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
194a0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
194d0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
194e0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
19510 6e 20 65 6c 65 6d 65 6e 74 20 74 77 6f 20 28 32  n element two (2
19520 29 20 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c  ) type mismatch,
19530 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70 65   must be of type
19540 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 74 79 70 65 6f 66 28 69 6e 74 29 29      typeof(int))
19570 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19580 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
195b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
195c0 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e  te3_db_config_in
195d0 74 70 74 72 5f 74 77 6f 5f 69 6e 74 73 28 0d 0a  tptr_two_ints(..
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70          _sql, op
19600 74 69 6f 6e 2c 20 28 49 6e 74 50 74 72 29 61 72  tion, (IntPtr)ar
19610 72 61 79 5b 30 5d 2c 20 28 69 6e 74 29 61 72 72  ray[0], (int)arr
19620 61 79 5b 31 5d 2c 20 28 69 6e 74 29 61 72 72 61  ay[1], (int)arra
19630 79 5b 32 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  y[2]);..        
19640 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19650 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19660 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19670 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19680 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 3a 20 2f  G_ENABLE_FKEY: /
19690 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20  / int int*..    
196a0 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
196b0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
196c0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
196d0 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45  IG_ENABLE_TRIGGE
196e0 52 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a  R: // int int*..
196f0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
19700 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
19710 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
19720 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54  CONFIG_ENABLE_FT
19730 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3a 20 2f 2f  S3_TOKENIZER: //
19740 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20   int int*..     
19750 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19760 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19770 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19780 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
19790 54 45 4e 53 49 4f 4e 3a 20 2f 2f 20 69 6e 74 20  TENSION: // int 
197a0 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20  int*..          
197b0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
197c0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
197d0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 5f  ITE_DBCONFIG_NO_
197e0 43 4b 50 54 5f 4f 4e 5f 43 4c 4f 53 45 3a 20 2f  CKPT_ON_CLOSE: /
197f0 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20  / int int*..    
19800 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19810 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
19820 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
19830 49 47 5f 45 4e 41 42 4c 45 5f 51 50 53 47 3a 20  IG_ENABLE_QPSG: 
19840 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20  // int int*..   
19850 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19860 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
19870 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
19880 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50 3a  FIG_TRIGGER_EQP:
19890 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20   // int int*..  
198a0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
198b0 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
198c0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
198d0 4e 46 49 47 5f 52 45 53 45 54 5f 44 41 54 41 42  NFIG_RESET_DATAB
198e0 41 53 45 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a  ASE: // int int*
198f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
19900 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44  se SQLiteConfigD
19910 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
19920 44 42 43 4f 4e 46 49 47 5f 44 45 46 45 4e 53 49  DBCONFIG_DEFENSI
19930 56 45 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d  VE: // int int*.
19940 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
19950 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  e SQLiteConfigDb
19960 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
19970 42 43 4f 4e 46 49 47 5f 57 52 49 54 41 42 4c 45  BCONFIG_WRITABLE
19980 5f 53 43 48 45 4d 41 3a 20 2f 2f 20 69 6e 74 20  _SCHEMA: // int 
19990 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20  int*..          
199a0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
199b0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
199c0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 45 47  ITE_DBCONFIG_LEG
199d0 41 43 59 5f 41 4c 54 45 52 5f 54 41 42 4c 45 3a  ACY_ALTER_TABLE:
199e0 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20   // int int*..  
199f0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
19a00 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
19a10 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
19a20 4e 46 49 47 5f 44 51 53 5f 44 4d 4c 3a 20 2f 2f  NFIG_DQS_DML: //
19a30 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20   int int*..     
19a40 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19a50 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19a60 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19a70 47 5f 44 51 53 5f 44 44 4c 3a 20 2f 2f 20 69 6e  G_DQS_DDL: // in
19a80 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20  t int*..        
19a90 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43      case SQLiteC
19aa0 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53  onfigDbOpsEnum.S
19ab0 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45  QLITE_DBCONFIG_E
19ac0 4e 41 42 4c 45 5f 56 49 45 57 3a 20 2f 2f 20 69  NABLE_VIEW: // i
19ad0 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20  nt int*..       
19ae0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 62  if (!(value is b
19b10 6f 6f 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ool))..         
19b20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
19b50 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
19b60 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
19b70 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
19ba0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
19bb0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
19be0 20 76 61 6c 75 65 20 74 79 70 65 20 6d 69 73 6d   value type mism
19bf0 61 74 63 68 2c 20 6d 75 73 74 20 62 65 20 6f 66  atch, must be of
19c00 20 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20   type {0}",..   
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
19c30 62 6f 6f 6c 29 29 29 3b 0d 0a 20 20 20 20 20 20  bool)));..      
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19c60 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c         int resul
19c70 74 20 3d 20 30 3b 20 2f 2a 20 4e 4f 54 20 55 53  t = 0; /* NOT US
19c80 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ED */....       
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19ca0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
19cb0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
19cc0 64 62 5f 63 6f 6e 66 69 67 5f 69 6e 74 5f 72 65  db_config_int_re
19cd0 66 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  fint(..         
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
19cf0 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 28 28 62  sql, option, ((b
19d00 6f 6f 6c 29 76 61 6c 75 65 20 3f 20 31 20 3a 20  ool)value ? 1 : 
19d10 30 29 2c 20 72 65 66 20 72 65 73 75 6c 74 29 3b  0), ref result);
19d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19d40 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
19d50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
19d80 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
19d90 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
19da0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
19dd0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74        "unsupport
19e00 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ed configuration
19e10 20 6f 70 74 69 6f 6e 20 7b 30 7d 22 2c 20 6f 70   option {0}", op
19e20 74 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  tion));..       
19e30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19e40 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
19e50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
19e60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  >..    /// Enabl
19e70 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73 20 65  es or disables e
19e80 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67  xtension loading
19e90 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20   by SQLite...   
19ea0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
19eb0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
19ec0 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a  name="bOnOff">..
19ed0 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20      /// True to 
19ee0 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f  enable loading o
19ef0 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61  f extensions, fa
19f00 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d  lse to disable..
19f10 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
19f20 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
19f30 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
19f40 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62  tLoadExtension(b
19f50 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
19f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
19f70 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
19f80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51  ..        if (SQ
19f90 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65  LiteVersionNumbe
19fa0 72 20 3e 3d 20 33 30 31 33 30 30 30 29 0d 0a 20  r >= 3013000).. 
19fb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19fc0 20 20 20 20 20 20 6e 20 3d 20 53 65 74 43 6f 6e        n = SetCon
19fd0 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e  figurationOption
19fe0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19ff0 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44     SQLiteConfigD
1a000 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
1a010 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f  DBCONFIG_ENABLE_
1a020 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c 0d  LOAD_EXTENSION,.
1a030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a040 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 20   bOnOff);..     
1a050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
1a060 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
1a070 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
1a080 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a090 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  ds.sqlite3_enabl
1a0a0 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
1a0b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a0c0 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
1a0d0 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 20 20   ? -1 : 0));..  
1a0e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a0f0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
1a100 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
1a110 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1a120 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
1a130 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
1a140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1a150 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1a160 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74  // Loads a SQLit
1a170 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72  e extension libr
1a180 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  ary from the nam
1a190 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f  ed file...    //
1a1a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1a1b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1a1c0 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20  e="fileName">.. 
1a1d0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
1a1e0 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c  of the dynamic l
1a1f0 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65  ink library file
1a200 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1a210 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20  extension...    
1a220 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1a230 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1a240 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20  e="procName">.. 
1a250 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
1a260 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20  of the exported 
1a270 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f  function used to
1a280 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
1a290 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20  extension...    
1a2a0 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65  /// If null, the
1a2b0 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65   default "sqlite
1a2c0 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74  3_extension_init
1a2d0 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d  " will be used..
1a2e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1a2f0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1a300 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f  override void Lo
1a310 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69  adExtension(stri
1a320 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72  ng fileName, str
1a330 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20  ing procName).. 
1a340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
1a350 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75   (fileName == nu
1a360 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1a370 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
1a380 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
1a390 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d  ("fileName");...
1a3a0 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
1a3b0 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
1a3c0 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
1a3d0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1a3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
1a3f0 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65  e[] utf8FileName
1a400 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e   = UTF8Encoding.
1a410 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 66 69  UTF8.GetBytes(fi
1a420 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d  leName + '\0');.
1a430 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
1a440 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65  e[] utf8ProcName
1a450 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
1a460 20 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 63          if (proc
1a470 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
1a490 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54  tf8ProcName = UT
1a4a0 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e  F8Encoding.UTF8.
1a4b0 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d  GetBytes(procNam
1a4c0 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20  e + '\0');....  
1a4d0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1a4e0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
1a4f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a500 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65  s.sqlite3_load_e
1a510 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20  xtension(..     
1a520 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
1a530 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75   utf8FileName, u
1a540 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66  tf8ProcName, ref
1a550 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20   pError);....   
1a560 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
1a570 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1a580 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
1a590 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1a5a0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
1a5b0 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67  (n, UTF8ToString
1a5c0 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a  (pError, -1));..
1a5d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a5e0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1a5f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a600 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d     if (pError !=
1a610 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
1a620 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
1a640 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a650 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70  s.sqlite3_free(p
1a660 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
1a670 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20           pError 
1a680 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1a690 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a6a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
1a6b0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  ...    /// Enabl
1a6c0 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73 20 65  es or disables e
1a6d0 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63  xtended result c
1a6e0 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79  odes returned by
1a6f0 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74   SQLite..    int
1a700 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1a710 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52  oid SetExtendedR
1a720 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20  esultCodes(bool 
1a730 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
1a740 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1a750 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
1a760 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1a770 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
1a780 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20  esult_codes(..  
1a790 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62          _sql, (b
1a7a0 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29  OnOff ? -1 : 0))
1a7b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
1a7c0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
1a7d0 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
1a7e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1a7f0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
1a800 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  r());..    }..  
1a810 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c    /// Gets the l
1a820 61 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72  ast SQLite error
1a830 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
1a840 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
1a850 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73  iteErrorCode Res
1a860 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
1a870 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
1a880 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a890 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ds.sqlite3_errco
1a8a0 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  de(_sql);..    }
1a8b0 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
1a8c0 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
1a8d0 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
1a8e0 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  de..    internal
1a8f0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
1a900 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64  ErrorCode Extend
1a910 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  edResultCode()..
1a920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
1a930 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1a940 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1a950 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
1a960 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
1a970 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20  ..    /// Add a 
1a980 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20  log message via 
1a990 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74  the SQLite sqlit
1a9a0 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65  e3_log interface
1a9b0 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1a9c0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f  override void Lo
1a9d0 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45  gMessage(SQLiteE
1a9e0 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64  rrorCode iErrCod
1a9f0 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61  e, string zMessa
1aa00 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ge)..    {..    
1aa10 20 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61    StaticLogMessa
1aa20 67 65 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65  ge(iErrCode, zMe
1aa30 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ssage);..    }..
1aa40 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20  ..    /// Add a 
1aa50 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20  log message via 
1aa60 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74  the SQLite sqlit
1aa70 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65  e3_log interface
1aa80 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1aa90 73 74 61 74 69 63 20 76 6f 69 64 20 53 74 61 74  static void Stat
1aaa0 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  icLogMessage(SQL
1aab0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72  iteErrorCode iEr
1aac0 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
1aad0 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
1aae0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
1aaf0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1ab00 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20  3_log(iErrCode, 
1ab10 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29  ToUTF8(zMessage)
1ab20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66  );..    }....#if
1ab30 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 7c   INTEROP_CODEC |
1ab40 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  | INTEROP_INCLUD
1ab50 45 5f 53 45 45 0d 0a 20 20 20 20 70 72 69 76 61  E_SEE..    priva
1ab60 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 5a  te static void Z
1ab70 65 72 6f 50 61 73 73 77 6f 72 64 28 62 79 74 65  eroPassword(byte
1ab80 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  [] passwordBytes
1ab90 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1aba0 20 20 69 66 20 28 70 61 73 73 77 6f 72 64 42 79    if (passwordBy
1abb0 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  tes == null) ret
1abc0 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
1abd0 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
1abe0 20 30 3b 20 69 6e 64 65 78 20 3c 20 70 61 73 73   0; index < pass
1abf0 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
1ac00 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
1ac10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ac20 20 20 20 62 79 74 65 20 76 61 6c 75 65 20 3d 20     byte value = 
1ac30 28 62 79 74 65 29 28 28 69 6e 64 65 78 20 2b 20  (byte)((index + 
1ac40 31 29 20 25 20 62 79 74 65 2e 4d 61 78 56 61 6c  1) % byte.MaxVal
1ac50 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
1ac60 20 20 20 20 70 61 73 73 77 6f 72 64 42 79 74 65      passwordByte
1ac70 73 5b 69 6e 64 65 78 5d 20 3d 20 76 61 6c 75 65  s[index] = value
1ac80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1ac90 61 73 73 77 6f 72 64 42 79 74 65 73 5b 69 6e 64  asswordBytes[ind
1aca0 65 78 5d 20 5e 3d 20 76 61 6c 75 65 3b 0d 0a 20  ex] ^= value;.. 
1acb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
1acc0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1acd0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1ace0 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  tPassword(byte[]
1acf0 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d   passwordBytes).
1ad00 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
1ad10 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1ad20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1ad30 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65  thods.sqlite3_ke
1ad40 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64  y(_sql, password
1ad50 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42  Bytes, passwordB
1ad60 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 0d  ytes.Length);...
1ad70 0a 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65  .      if (Helpe
1ad80 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
1ad90 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  s(_flags, SQLite
1ada0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
1adb0 48 69 64 65 50 61 73 73 77 6f 72 64 29 29 0d 0a  HidePassword))..
1adc0 20 20 20 20 20 20 20 20 5a 65 72 6f 50 61 73 73          ZeroPass
1add0 77 6f 72 64 28 70 61 73 73 77 6f 72 64 42 79 74  word(passwordByt
1ade0 65 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  es);....      if
1adf0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
1ae00 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
1ae10 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1ae20 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
1ae30 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
1ae40 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
1ae50 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1ae60 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c    _usePool = fal
1ae70 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  se;....#if !NET_
1ae80 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1ae90 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1aea0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
1aeb0 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
1aec0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
1aed0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 43  at(..          C
1aee0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1aef0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1af00 20 20 20 20 20 20 22 53 65 74 50 61 73 73 77 6f        "SetPasswo
1af10 72 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c  rd (Pool) Disabl
1af20 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ed: {0}",..     
1af30 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
1af40 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
1af50 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1af60 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1af70 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1af80 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79  hangePassword(by
1af90 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64  te[] newPassword
1afa0 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
1afb0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1afc0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
1afd0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1afe0 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c  ite3_rekey(_sql,
1aff0 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
1b000 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42  s, (newPasswordB
1b010 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20  ytes == null) ? 
1b020 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42  0 : newPasswordB
1b030 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 0d  ytes.Length);...
1b040 0a 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65  .      if (Helpe
1b050 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
1b060 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  s(_flags, SQLite
1b070 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
1b080 48 69 64 65 50 61 73 73 77 6f 72 64 29 29 0d 0a  HidePassword))..
1b090 20 20 20 20 20 20 20 20 5a 65 72 6f 50 61 73 73          ZeroPass
1b0a0 77 6f 72 64 28 6e 65 77 50 61 73 73 77 6f 72 64  word(newPassword
1b0b0 42 79 74 65 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Bytes);....     
1b0c0 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
1b0d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
1b0e0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1b0f0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
1b100 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
1b110 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
1b120 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1b130 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
1b140 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
1b150 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1b160 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1b170 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
1b180 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1b190 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1b1a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1b1b0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1b1c0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1b1d0 20 20 20 20 20 20 20 20 20 22 43 68 61 6e 67 65           "Change
1b1e0 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20  Password (Pool) 
1b1f0 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
1b200 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c  .          Handl
1b210 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
1b220 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
1b230 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
1b240 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b250 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1b260 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74  ProgressHook(int
1b270 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72 6f   nOps, SQLitePro
1b280 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66 75  gressCallback fu
1b290 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
1b2a0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
1b2b0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1b2c0 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
1b2d0 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e  (_sql, nOps, fun
1b2e0 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
1b2f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b300 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b310 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69   void SetAuthori
1b320 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75  zerHook(SQLiteAu
1b330 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b  thorizerCallback
1b340 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1b350 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1b360 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1b370 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
1b380 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
1b390 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
1b3a0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1b3b0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
1b3c0 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
1b3d0 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
1b3e0 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
1b3f0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
1b400 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1b410 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
1b420 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
1b430 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
1b440 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b450 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1b460 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
1b470 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
1b480 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
1b490 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
1b4a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1b4b0 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
1b4c0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
1b4d0 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
1b4e0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1b4f0 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
1b500 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
1b510 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
1b520 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
1b530 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
1b540 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1b550 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
1b560 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
1b570 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1b580 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1b590 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c  void SetTraceCal
1b5a0 6c 62 61 63 6b 32 28 53 51 4c 69 74 65 54 72 61  lback2(SQLiteTra
1b5b0 63 65 46 6c 61 67 73 20 6d 61 73 6b 2c 20 53 51  ceFlags mask, SQ
1b5c0 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
1b5d0 6b 32 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  k2 func)..    {.
1b5e0 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
1b5f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1b600 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 5f 73  ite3_trace_v2(_s
1b610 71 6c 2c 20 6d 61 73 6b 2c 20 66 75 6e 63 2c 20  ql, mask, func, 
1b620 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
1b630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1b640 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1b650 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f  id SetRollbackHo
1b660 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63  ok(SQLiteRollbac
1b670 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  kCallback func).
1b680 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
1b690 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1b6a0 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61  s.sqlite3_rollba
1b6b0 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  ck_hook(_sql, fu
1b6c0 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
1b6d0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1b6e0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1b6f0 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68     /// Allows th
1b700 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c  e setting of a l
1b710 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
1b720 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74  invoked by SQLit
1b730 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f  e when a..    //
1b740 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75  / log event occu
1b750 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61  rs.  Only one ca
1b760 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65  llback may be se
1b770 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70  t.  If NULL is p
1b780 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20  assed,..    /// 
1b790 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  the logging call
1b7a0 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74  back is unregist
1b7b0 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ered...    /// <
1b7c0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1b7d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1b7e0 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61  func">The callba
1b7f0 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69  ck function to i
1b800 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  nvoke.</param>..
1b810 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1b820 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c  >Returns a resul
1b830 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
1b840 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b850 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
1b860 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61  rorCode SetLogCa
1b870 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67  llback(SQLiteLog
1b880 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
1b890 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
1b8a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
1b8b0 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
1b8c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1b8d0 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20  config_log(..   
1b8e0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1b8f0 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
1b900 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20  ITE_CONFIG_LOG, 
1b910 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
1b920 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  o);....        i
1b930 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
1b940 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
1b950 20 20 20 20 20 20 20 20 20 20 5f 73 65 74 4c 6f            _setLo
1b960 67 43 61 6c 6c 62 61 63 6b 20 3d 20 28 66 75 6e  gCallback = (fun
1b970 63 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  c != null);.... 
1b980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
1b990 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d  ///////////////.
1ba00 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1ba10 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 70  ary>..    /// Ap
1ba20 70 65 6e 64 73 20 61 6e 20 65 72 72 6f 72 20 6d  pends an error m
1ba30 65 73 73 61 67 65 20 61 6e 64 20 61 6e 20 61 70  essage and an ap
1ba40 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65 2d 65  propriate line-e
1ba50 6e 64 69 6e 67 20 74 6f 20 61 20 3c 73 65 65 20  nding to a <see 
1ba60 63 72 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c  cref="StringBuil
1ba70 64 65 72 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  der" />..    ///
1ba80 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69 73   instance.  This
1ba90 20 69 73 20 75 73 65 66 75 6c 20 62 65 63 61 75   is useful becau
1baa0 73 65 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70  se the .NET Comp
1bab0 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 20 68 61  act Framework ha
1bac0 73 20 61 20 73 6c 69 67 68 74 6c 79 20 64 69 66  s a slightly dif
1bad0 66 65 72 65 6e 74 20 73 65 74 0d 0a 20 20 20 20  ferent set..    
1bae0 2f 2f 2f 20 6f 66 20 73 75 70 70 6f 72 74 65 64  /// of supported
1baf0 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 74 68 65   methods for the
1bb00 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 69   <see cref="Stri
1bb10 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e 20 63 6c  ngBuilder" /> cl
1bb20 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ass...    /// </
1bb30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1bb40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
1bb50 75 69 6c 64 65 72 22 3e 0d 0a 20 20 20 20 2f 2f  uilder">..    //
1bb60 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1bb70 22 53 74 72 69 6e 67 42 75 69 6c 64 65 72 22 20  "StringBuilder" 
1bb80 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 61  /> instance to a
1bb90 70 70 65 6e 64 20 74 6f 2e 0d 0a 20 20 20 20 2f  ppend to...    /
1bba0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1bbb0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1bbc0 3d 22 6d 65 73 73 61 67 65 22 3e 0d 0a 20 20 20  ="message">..   
1bbd0 20 2f 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65   /// The message
1bbe0 20 74 6f 20 61 70 70 65 6e 64 2e 20 20 49 74 20   to append.  It 
1bbf0 77 69 6c 6c 20 62 65 20 66 6f 6c 6c 6f 77 65 64  will be followed
1bc00 20 62 79 20 61 6e 20 61 70 70 72 6f 70 72 69 61   by an appropria
1bc10 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 2e 0d  te line-ending..
1bc20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1bc30 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
1bc40 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 65 6e  tatic void Appen
1bc50 64 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  dError(..       
1bc60 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62   StringBuilder b
1bc70 75 69 6c 64 65 72 2c 0d 0a 20 20 20 20 20 20 20  uilder,..       
1bc80 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 0d   string message.
1bc90 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1bca0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
1bcb0 75 69 6c 64 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  uilder == null).
1bcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1bcd0 75 72 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  urn;....#if !PLA
1bce0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
1bcf0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
1bd00 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c 69  builder.AppendLi
1bd10 6e 65 28 6d 65 73 73 61 67 65 29 3b 0d 0a 23 65  ne(message);..#e
1bd20 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 62 75 69  lse..        bui
1bd30 6c 64 65 72 2e 41 70 70 65 6e 64 28 6d 65 73 73  lder.Append(mess
1bd40 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  age);..        b
1bd50 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 5c  uilder.Append("\
1bd60 72 5c 6e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  r\n");..#endif..
1bd70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bde0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1bdf0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1be00 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
1be10 74 6f 20 63 61 75 73 65 20 74 68 65 20 53 51 4c  to cause the SQL
1be20 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ite native libra
1be30 72 79 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65  ry to invalidate
1be40 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 73 20 66 75  ..    /// its fu
1be50 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 20  nction pointers 
1be60 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
1be70 69 73 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68  is instance.  Th
1be80 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 0d  is is necessary.
1be90 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 70 72 65 76  .    /// to prev
1bea0 65 6e 74 20 63 61 6c 6c 73 20 66 72 6f 6d 20 6e  ent calls from n
1beb0 61 74 69 76 65 20 63 6f 64 65 20 69 6e 74 6f 20  ative code into 
1bec0 64 65 6c 65 67 61 74 65 73 20 74 68 61 74 20 6d  delegates that m
1bed0 61 79 20 68 61 76 65 20 62 65 65 6e 0d 0a 20 20  ay have been..  
1bee0 20 20 2f 2f 2f 20 67 61 72 62 61 67 65 20 63 6f    /// garbage co
1bef0 6c 6c 65 63 74 65 64 2e 20 20 4e 6f 72 6d 61 6c  llected.  Normal
1bf00 6c 79 2c 20 74 68 65 73 65 20 74 79 70 65 73 20  ly, these types 
1bf10 6f 66 20 69 73 73 75 65 73 20 63 61 6e 20 6f 6e  of issues can on
1bf20 6c 79 20 61 72 69 73 65 20 66 6f 72 0d 0a 20 20  ly arise for..  
1bf30 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
1bf40 73 20 74 68 61 74 20 61 72 65 20 61 64 64 65 64  s that are added
1bf50 20 74 6f 20 74 68 65 20 70 6f 6f 6c 3b 20 68 6f   to the pool; ho
1bf60 77 76 65 72 2c 20 69 74 20 69 73 20 67 6f 6f 64  wver, it is good
1bf70 20 70 72 61 63 74 69 63 65 20 74 6f 0d 0a 20 20   practice to..  
1bf80 20 20 2f 2f 2f 20 75 6e 63 6f 6e 64 69 74 69 6f    /// unconditio
1bf90 6e 61 6c 6c 79 20 69 6e 76 61 6c 69 64 61 74 65  nally invalidate
1bfa0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
1bfb0 72 73 20 74 68 61 74 20 6d 61 79 20 72 65 66 65  rs that may refe
1bfc0 72 20 74 6f 20 6f 62 6a 65 63 74 73 0d 0a 20 20  r to objects..  
1bfd0 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 69 73 70    /// being disp
1bfe0 6f 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  osed...    /// <
1bff0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1c000 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c010 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 22 3e 0d  includeGlobal">.
1c020 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
1c030 6f 20 74 6f 20 61 6c 73 6f 20 69 6e 76 61 6c 69  o to also invali
1c040 64 61 74 65 20 67 6c 6f 62 61 6c 20 66 75 6e 63  date global func
1c050 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 20 28 69  tion pointers (i
1c060 2e 65 2e 20 74 68 6f 73 65 20 74 68 61 74 0d 0a  .e. those that..
1c070 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 74 20      /// are not 
1c080 64 69 72 65 63 74 6c 79 20 61 73 73 6f 63 69 61  directly associa
1c090 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63 6f  ted with this co
1c0a0 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nnection on the 
1c0b0 6e 61 74 69 76 65 20 73 69 64 65 29 2e 0d 0a 20  native side)... 
1c0c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1c0d0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1c0e0 6e 61 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22 3e  name="canThrow">
1c0f0 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
1c100 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f  ro if this metho
1c110 64 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  d is being execu
1c120 74 65 64 20 77 69 74 68 69 6e 20 61 20 63 6f 6e  ted within a con
1c130 74 65 78 74 20 77 68 65 72 65 20 69 74 20 63 61  text where it ca
1c140 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 72 6f 77  n..    /// throw
1c150 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 6e   an exception in
1c160 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20 66 61   the event of fa
1c170 69 6c 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65  ilure; otherwise
1c180 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  , zero...    ///
1c190 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
1c1a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1c1b0 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
1c1c0 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 61  f this method wa
1c1d0 73 20 73 75 63 63 65 73 73 66 75 6c 3b 20 6f 74  s successful; ot
1c1e0 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
1c1f0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1c200 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
1c210 62 6f 6f 6c 20 55 6e 68 6f 6f 6b 4e 61 74 69 76  bool UnhookNativ
1c220 65 43 61 6c 6c 62 61 63 6b 73 28 0d 0a 20 20 20  eCallbacks(..   
1c230 20 20 20 20 20 62 6f 6f 6c 20 69 6e 63 6c 75 64       bool includ
1c240 65 47 6c 6f 62 61 6c 2c 0d 0a 20 20 20 20 20 20  eGlobal,..      
1c250 20 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 0d    bool canThrow.
1c260 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1c270 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
1c280 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1c290 49 6e 69 74 69 61 6c 6c 79 2c 20 74 68 69 73 20  Initially, this 
1c2a0 6d 65 74 68 6f 64 20 61 73 73 75 6d 65 73 20 73  method assumes s
1c2b0 75 63 63 65 73 73 2e 20 20 54 68 65 6e 2c 20 69  uccess.  Then, i
1c2c0 66 20 61 6e 79 20 61 74 74 65 6d 70 74 0d 0a 20  f any attempt.. 
1c2d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c2e0 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 61 20  to invalidate a 
1c2f0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
1c300 20 66 61 69 6c 73 2c 20 74 68 65 20 6f 76 65 72   fails, the over
1c310 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 0d 0a 20  all result is.. 
1c320 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c330 73 65 74 20 74 6f 20 66 61 69 6c 75 72 65 2e 20  set to failure. 
1c340 20 48 6f 77 65 76 65 72 2c 20 74 68 69 73 20 77   However, this w
1c350 69 6c 6c 20 6e 6f 74 20 70 72 65 76 65 6e 74 20  ill not prevent 
1c360 66 75 72 74 68 65 72 0d 0a 20 20 20 20 20 20 20  further..       
1c370 20 2f 2f 20 20 20 20 20 20 20 61 74 74 65 6d 70   //       attemp
1c380 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 69  ts, if any, to i
1c390 6e 76 61 6c 69 64 61 74 65 20 73 75 62 73 65 71  nvalidate subseq
1c3a0 75 65 6e 74 20 66 75 6e 63 74 69 6f 6e 20 70 6f  uent function po
1c3b0 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  inters...       
1c3c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   //..        boo
1c3d0 6c 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65 3b  l result = true;
1c3e0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1c3f0 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
1c400 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1c410 6b 3b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69  k;..        Stri
1c420 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
1c430 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
1c440 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
1c450 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c4b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1c4c0 6f 6e 20 52 6f 6c 6c 62 61 63 6b 20 48 6f 6f 6b  on Rollback Hook
1c4d0 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e   (Per-Connection
1c4e0 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  )..        try..
1c4f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c500 20 20 20 20 20 20 20 53 65 74 52 6f 6c 6c 62 61         SetRollba
1c510 63 6b 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a  ckHook(null); /*
1c520 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1c530 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43     }..#if !NET_C
1c540 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1c550 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1c560 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1c570 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73  ception e)..#els
1c580 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  e..        catch
1c590 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65   (Exception)..#e
1c5a0 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndif..        {.
1c5b0 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1c5c0 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1c5d0 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1c5e0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1c5f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c600 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1c610 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
1c620 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1c630 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c640 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
1c650 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
1c660 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
1c670 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69              "Fai
1c680 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f 6c  led to unset rol
1c690 6c 62 61 63 6b 20 68 6f 6f 6b 3a 20 7b 30 7d 22  lback hook: {0}"
1c6a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c6b0 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74         e)); /* t
1c6c0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1c6d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c6e0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
1c6f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c700 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
1c710 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
1c720 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
1c730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
1c740 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
1c750 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75  er, "failed to u
1c760 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68 6f  nset rollback ho
1c770 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ok");..         
1c780 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72     rc = SQLiteEr
1c790 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
1c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1c7b0 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  sult = false;.. 
1c7c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c7d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1c7e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c840 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1c850 72 65 67 69 6f 6e 20 54 72 61 63 65 20 43 61 6c  region Trace Cal
1c860 6c 62 61 63 6b 20 28 50 65 72 2d 43 6f 6e 6e 65  lback (Per-Conne
1c870 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
1c880 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
1c890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1c8b0 4f 54 45 3a 20 57 68 65 6e 20 75 73 69 6e 67 20  OTE: When using 
1c8c0 76 65 72 73 69 6f 6e 20 33 2e 31 34 20 28 6f 72  version 3.14 (or
1c8d0 20 6c 61 74 65 72 29 20 6f 66 20 74 68 65 20 53   later) of the S
1c8e0 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
1c8f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c900 20 6c 69 62 72 61 72 79 2c 20 75 73 65 20 74 68   library, use th
1c910 65 20 6e 65 77 65 72 20 73 71 6c 69 74 65 33 5f  e newer sqlite3_
1c920 74 72 61 63 65 5f 76 32 28 29 20 41 50 49 20 69  trace_v2() API i
1c930 6e 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20  n order..       
1c940 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1c950 20 75 6e 68 6f 6f 6b 20 74 68 65 20 74 72 61 63   unhook the trac
1c960 65 20 63 61 6c 6c 62 61 63 6b 2c 20 6a 75 73 74  e callback, just
1c970 20 69 6e 20 63 61 73 65 20 74 68 65 20 6f 6c 64   in case the old
1c980 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
1c990 2f 2f 20 20 20 20 20 20 20 41 50 49 20 69 73 20  //       API is 
1c9a0 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 28 65  not available (e
1c9b0 2e 67 2e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  .g. SQLITE_OMIT_
1c9c0 44 45 50 52 45 43 41 54 45 44 29 2e 0d 0a 20 20  DEPRECATED)...  
1c9d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c9e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
1c9f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1ca00 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  s.sqlite3_libver
1ca10 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 20 3e 3d  sion_number() >=
1ca20 20 33 30 31 34 30 30 30 29 0d 0a 20 20 20 20 20   3014000)..     
1ca30 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 72             SetTr
1ca40 61 63 65 43 61 6c 6c 62 61 63 6b 32 28 53 51 4c  aceCallback2(SQL
1ca50 69 74 65 54 72 61 63 65 46 6c 61 67 73 2e 53 51  iteTraceFlags.SQ
1ca60 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 45 2c  LITE_TRACE_NONE,
1ca70 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77   null); /* throw
1ca80 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1ca90 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1caa0 20 20 20 20 20 20 20 53 65 74 54 72 61 63 65 43         SetTraceC
1cab0 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b 20 2f  allback(null); /
1cac0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1cad0 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
1cae0 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1caf0 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1cb00 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1cb10 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
1cb20 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
1cb30 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
1cb40 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
1cb50 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1cb60 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1cb70 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1cb80 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1cb90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1cba0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1cbb0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1cbc0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1cbd0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
1cbf0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1cc00 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
1cc20 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 74 72  iled to unset tr
1cc30 61 63 65 20 63 61 6c 6c 62 61 63 6b 3a 20 7b 30  ace callback: {0
1cc40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cc50 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
1cc60 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1cc70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1cc80 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
1cc90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1ccb0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1ccc0 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
1ccd0 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1cce0 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69   AppendError(bui
1ccf0 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f  lder, "failed to
1cd00 20 75 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c   unset trace cal
1cd10 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20  lback");..      
1cd20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74        rc = SQLit
1cd30 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1cd40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cd50 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
1cd60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1cd70 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1cd80 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cde0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cdf0 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 69 74    #region Commit
1ce00 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65   Hook (Per-Conne
1ce10 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
1ce20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 43              SetC
1ce40 6f 6d 6d 69 74 48 6f 6f 6b 28 6e 75 6c 6c 29 3b  ommitHook(null);
1ce50 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1ce60 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
1ce70 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1ce80 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1ce90 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1cea0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1ceb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
1cec0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1ced0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1cee0 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
1cef0 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1cf00 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1cf10 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1cf20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1cf40 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1cf50 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1cf60 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
1cf80 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1cf90 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cfb0 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  Failed to unset 
1cfc0 63 6f 6d 6d 69 74 20 68 6f 6f 6b 3a 20 7b 30 7d  commit hook: {0}
1cfd0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1cfe0 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
1cff0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1d000 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d010 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
1d020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d030 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
1d040 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
1d050 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
1d060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d070 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
1d080 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  der, "failed to 
1d090 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20 68 6f 6f  unset commit hoo
1d0a0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
1d0b0 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
1d0c0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d  orCode.Error;...
1d0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
1d0e0 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
1d0f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d100 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1d110 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d170 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1d180 65 67 69 6f 6e 20 55 70 64 61 74 65 20 48 6f 6f  egion Update Hoo
1d190 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f  k (Per-Connectio
1d1a0 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  n)..        try.
1d1b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1d1c0 20 20 20 20 20 20 20 20 53 65 74 55 70 64 61 74          SetUpdat
1d1d0 65 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20  eHook(null); /* 
1d1e0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1d1f0 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
1d200 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1d210 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1d220 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1d230 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65  eption e)..#else
1d240 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1d250 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e  (Exception)..#en
1d260 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dif..        {..
1d270 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1d280 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1d290 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1d2a0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d2b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d2c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
1d2d0 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
1d2e0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
1d2f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1d300 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
1d310 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
1d320 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
1d330 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c             "Fail
1d340 65 64 20 74 6f 20 75 6e 73 65 74 20 75 70 64 61  ed to unset upda
1d350 74 65 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a  te hook: {0}",..
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f      e)); /* thro
1d380 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
1d390 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d3a0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1d3b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d3c0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1d3d0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1d3e0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65              Appe
1d400 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c  ndError(builder,
1d410 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65   "failed to unse
1d420 74 20 75 70 64 61 74 65 20 68 6f 6f 6b 22 29 3b  t update hook");
1d430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
1d440 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
1d450 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20  de.Error;....   
1d460 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1d470 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1d480 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1d490 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1d4a0 20 20 20 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 2f 2f 2f  ////////////////
1d4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d500 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1d510 6e 20 41 75 74 68 6f 72 69 7a 65 72 20 48 6f 6f  n Authorizer Hoo
1d520 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f  k (Per-Connectio
1d530 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  n)..        try.
1d540 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1d550 20 20 20 20 20 20 20 20 53 65 74 41 75 74 68 6f          SetAutho
1d560 72 69 7a 65 72 48 6f 6f 6b 28 6e 75 6c 6c 29 3b  rizerHook(null);
1d570 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1d580 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
1d590 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1d5a0 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1d5b0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1d5c0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1d5d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
1d5e0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1d5f0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1d600 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
1d610 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1d620 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1d630 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1d640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1d660 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1d670 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1d680 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
1d6a0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1d6b0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d6d0 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  Failed to unset 
1d6e0 61 75 74 68 6f 72 69 7a 65 72 20 68 6f 6f 6b 3a  authorizer hook:
1d6f0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1d700 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1d710 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1d720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1d730 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1d740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d760 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1d770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1d780 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1d790 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28      AppendError(
1d7a0 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64  builder, "failed
1d7b0 20 74 6f 20 75 6e 73 65 74 20 61 75 74 68 6f 72   to unset author
1d7c0 69 7a 65 72 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20  izer hook");..  
1d7d0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1d7e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1d7f0 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1d800 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61       result = fa
1d810 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1d820 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1d830 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d8a0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1d8b0 6f 67 72 65 73 73 20 48 6f 6f 6b 20 28 50 65 72  ogress Hook (Per
1d8c0 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20  -Connection)..  
1d8d0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1d8e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d8f0 20 20 53 65 74 50 72 6f 67 72 65 73 73 48 6f 6f    SetProgressHoo
1d900 6b 28 30 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74  k(0, null); /* t
1d910 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1d920 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   }..#if !NET_COM
1d930 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1d940 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1d950 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1d960 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d  ption e)..#else.
1d970 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
1d980 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64  Exception)..#end
1d990 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  if..        {..#
1d9a0 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1d9b0 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1d9c0 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1d9d0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1d9e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d9f0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
1da00 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
1da10 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
1da20 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1da30 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
1da40 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
1da50 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
1da60 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c 65            "Faile
1da70 64 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67 72  d to unset progr
1da80 65 73 73 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d  ess hook: {0}",.
1da90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1daa0 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1dab0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1dac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dad0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
1dae0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1daf0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1db00 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1db10 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
1db20 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70  .            App
1db30 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72  endError(builder
1db40 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73  , "failed to uns
1db50 65 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f 6b  et progress hook
1db60 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1db70 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1db80 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a  rCode.Error;....
1db90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1dba0 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
1dbb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1dbc0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1dbd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1dbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1dc40 67 69 6f 6e 20 4c 6f 67 20 43 61 6c 6c 62 61 63  gion Log Callbac
1dc50 6b 20 28 47 6c 6f 62 61 6c 29 0d 0a 20 20 20 20  k (Global)..    
1dc60 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1dc70 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 68 61 76 65  // NOTE: We have
1dc80 20 74 6f 20 62 65 20 63 61 72 65 66 75 6c 20 68   to be careful h
1dc90 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ere because the 
1dca0 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20  log callback..  
1dcb0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
1dcc0 73 20 6e 6f 74 20 70 65 72 2d 63 6f 6e 6e 65 63  s not per-connec
1dcd0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6e 61 74 69  tion on the nati
1dce0 76 65 20 73 69 64 65 2e 20 20 49 74 20 73 68 6f  ve side.  It sho
1dcf0 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  uld..        // 
1dd00 20 20 20 20 20 20 6f 6e 6c 79 20 62 65 20 75 6e        only be un
1dd10 73 65 74 20 62 79 20 74 68 69 73 20 6d 65 74 68  set by this meth
1dd20 6f 64 20 69 66 20 74 68 69 73 20 69 6e 73 74 61  od if this insta
1dd30 6e 63 65 20 77 61 73 0d 0a 20 20 20 20 20 20 20  nce was..       
1dd40 20 2f 2f 20 20 20 20 20 20 20 72 65 73 70 6f 6e   //       respon
1dd50 73 69 62 6c 65 20 66 6f 72 20 73 65 74 74 69 6e  sible for settin
1dd60 67 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  g it...        /
1dd70 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  /..        if (i
1dd80 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 20 26 26 20  ncludeGlobal && 
1dd90 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 29  _setLogCallback)
1dda0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1ddb0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1ddc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1dde0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 32  iteErrorCode rc2
1ddf0 20 3d 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63   = SetLogCallbac
1de00 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f  k(null); /* thro
1de10 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
1de20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 32 20          if (rc2 
1de30 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
1de40 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
1de50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1de70 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
1de80 65 72 2c 20 22 63 6f 75 6c 64 20 6e 6f 74 20 75  er, "could not u
1de90 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63  nset log callbac
1dea0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
1deb0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 72            rc = r
1dec0 63 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  c2;....         
1ded0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1dee0 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  t = false;..    
1def0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1df00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
1df10 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1df20 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1df30 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1df40 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1df50 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1df60 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1df70 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65   (Exception)..#e
1df80 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
1df90 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1dfa0 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1dfb0 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dfd0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1dfe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dff0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1e000 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
1e010 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1e020 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1e040 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1e050 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75      "Failed to u
1e080 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63  nset log callbac
1e090 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  k: {0}",..      
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
1e0c0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1e0d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e0e0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e110 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1e120 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1e130 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
1e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e150 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
1e160 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74  ilder, "failed t
1e170 6f 20 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c  o unset log call
1e180 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  back");..       
1e190 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1e1a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1e1b0 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ror;....        
1e1c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
1e1d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1e1e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e1f0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1e200 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1e210 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e270 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 73          if (!res
1e280 75 6c 74 20 26 26 20 63 61 6e 54 68 72 6f 77 29  ult && canThrow)
1e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1e2a0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1e2b0 63 65 70 74 69 6f 6e 28 72 63 2c 20 62 75 69 6c  ception(rc, buil
1e2c0 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  der.ToString());
1e2d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
1e2e0 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
1e2f0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1e300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e360 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1e370 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1e380 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66  od attempts to f
1e390 72 65 65 20 74 68 65 20 63 61 63 68 65 64 20 64  ree the cached d
1e3a0 61 74 61 62 61 73 65 20 6e 61 6d 65 20 75 73 65  atabase name use
1e3b0 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  d with the..    
1e3c0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
1e3d0 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f  etConfigurationO
1e3e0 70 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ption" /> method
1e3f0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1e400 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1e410 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6e 54  param name="canT
1e420 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  hrow">..    /// 
1e430 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73  Non-zero if this
1e440 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
1e450 20 65 78 65 63 75 74 65 64 20 77 69 74 68 69 6e   executed within
1e460 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
1e470 20 69 74 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f   it can..    ///
1e480 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
1e490 69 6f 6e 20 69 6e 20 74 68 65 20 65 76 65 6e 74  ion in the event
1e4a0 20 6f 66 20 66 61 69 6c 75 72 65 3b 20 6f 74 68   of failure; oth
1e4b0 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20  erwise, zero... 
1e4c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1e4d0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1e4e0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
1e4f0 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74  zero if this met
1e500 68 6f 64 20 77 61 73 20 73 75 63 63 65 73 73 66  hod was successf
1e510 75 6c 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a  ul; otherwise, z
1e520 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
1e530 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
1e540 69 76 61 74 65 20 62 6f 6f 6c 20 46 72 65 65 44  ivate bool FreeD
1e550 62 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  bName(..        
1e560 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 0d 0a 20  bool canThrow.. 
1e570 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
1e580 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1e590 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e5a0 20 20 20 20 20 69 66 20 28 64 62 4e 61 6d 65 20       if (dbName 
1e5b0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
1e5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
1e5f0 65 28 64 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  e(dbName);..    
1e600 20 20 20 20 20 20 20 20 20 20 20 20 64 62 4e 61              dbNa
1e610 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
1e620 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1e630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e640 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1e650 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
1e660 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1e670 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1e680 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1e690 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1e6a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
1e6b0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1e6c0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1e6d0 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
1e6e0 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1e6f0 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1e700 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1e710 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1e730 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1e740 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1e750 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
1e770 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1e780 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e7a0 46 61 69 6c 65 64 20 74 6f 20 66 72 65 65 20 64  Failed to free d
1e7b0 61 74 61 62 61 73 65 20 6e 61 6d 65 3a 20 7b 30  atabase name: {0
1e7c0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1e7d0 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
1e7e0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1e7f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e800 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
1e810 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1e830 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1e840 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
1e850 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1e860 20 69 66 20 28 63 61 6e 54 68 72 6f 77 29 0d 0a   if (canThrow)..
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20  throw;..        
1e890 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
1e8a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1e8b0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e910 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e920 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1e930 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
1e940 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
1e950 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
1e960 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
1e970 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
1e980 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
1e990 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
1e9a0 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
1e9b0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
1e9c0 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
1e9d0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1e9e0 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
1e9f0 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
1ea00 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
1ea10 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
1ea20 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
1ea30 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
1ea40 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ea50 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ea60 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
1ea70 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
1ea80 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1ea90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1eaa0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
1eab0 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
1eac0 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
1ead0 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
1eae0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1eaf0 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
1eb00 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
1eb10 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
1eb20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1eb30 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
1eb40 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
1eb50 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
1eb60 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1eb70 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
1eb80 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
1eb90 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
1eba0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1ebb0 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
1ebc0 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
1ebd0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
1ebe0 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
1ebf0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
1ec00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
1ec10 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1ec30 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1ec40 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
1ec50 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
1ec60 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
1ec70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1ec80 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1ec90 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1eca0 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
1ecb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
1ecc0 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
1ecd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1ece0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1ecf0 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1ed00 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
1ed10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1ed20 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
1ed30 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
1ed40 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
1ed50 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
1ed60 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
1ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1ed80 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
1ed90 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
1eda0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
1edb0 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
1edc0 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
1edd0 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
1ede0 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
1edf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1ee00 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
1ee10 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
1ee20 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
1ee30 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
1ee40 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
1ee50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1ee60 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1ee70 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
1ee80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee90 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
1eea0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
1eeb0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
1eec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1eed0 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
1eee0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1eef0 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
1ef00 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
1ef10 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
1ef20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
1ef30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1ef40 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1ef50 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1ef60 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
1ef80 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
1ef90 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1efa0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
1efb0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
1efc0 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
1efd0 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
1efe0 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
1eff0 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
1f000 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
1f010 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1f020 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75  ckupHandle backu
1f030 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d  pHandle = null;.
1f040 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
1f050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f060 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1f070 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
1f080 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
1f090 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
1f0a0 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
1f0b0 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
1f0c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f0d0 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d   IntPtr backup =
1f0e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f0f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
1f100 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20  kup_init(..     
1f110 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48             destH
1f120 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
1f130 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
1f140 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  zSourceName);...
1f150 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1f160 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74  (backup == IntPt
1f170 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f190 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1f1a0 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f  rorCode resultCo
1f1b0 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28  de = ResultCode(
1f1c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f1d0 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
1f1e0 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72  Code != SQLiteEr
1f1f0 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1f220 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c  eException(resul
1f230 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72  tCode, GetLastEr
1f240 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
1f250 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
1f280 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61  iteException("fa
1f290 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  iled to initiali
1f2a0 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20  ze backup");..  
1f2b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f2c0 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
1f2d0 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  pHandle = new SQ
1f2e0 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
1f2f0 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
1f300 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  kup);..        }
1f310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1f320 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
1f330 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
1f340 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
1f350 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
1f360 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1f370 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1f380 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1f390 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
1f3a0 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e     null, null, n
1f3b0 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  ull, backupHandl
1f3c0 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a  e, null, new obj
1f3d0 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
1f3e0 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
1f3f0 74 65 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20 64  te3), destCnn, d
1f400 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e  estName, sourceN
1f410 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame }));....    
1f420 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
1f430 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
1f440 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
1f450 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
1f460 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
1f470 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
1f480 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1f490 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
1f4a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1f4b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1f4c0 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
1f4d0 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
1f4e0 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
1f4f0 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
1f500 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
1f510 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
1f520 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
1f530 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
1f540 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
1f550 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1f560 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
1f570 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
1f580 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
1f590 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1f5a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
1f5b0 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
1f5c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
1f5d0 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
1f5e0 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
1f5f0 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
1f600 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1f610 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1f620 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
1f630 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
1f640 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
1f650 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
1f660 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
1f670 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
1f680 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
1f690 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
1f6a0 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
1f6b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1f6c0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1f6d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
1f6e0 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
1f6f0 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
1f700 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
1f710 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
1f720 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f730 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1f740 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
1f750 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
1f760 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
1f770 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
1f780 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  age,..        re
1f790 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  f bool retry..  
1f7a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
1f7b0 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
1f7c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1f7d0 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
1f7e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1f7f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1f800 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1f810 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
1f820 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
1f830 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
1f840 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
1f850 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
1f860 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1f870 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1f880 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1f890 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1f8a0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
1f8c0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
1f8d0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
1f8e0 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
1f8f0 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
1f900 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
1f910 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
1f920 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
1f930 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1f940 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1f950 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1f960 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1f970 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
1f980 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
1f990 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
1f9a0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
1f9b0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1f9c0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
1f9d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1f9e0 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
1f9f0 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
1fa00 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
1fa10 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
1fa20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
1fa30 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
1fa40 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
1fa50 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
1fa60 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1fa70 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
1fa80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1fa90 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1faa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fab0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
1fac0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
1fad0 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
1faf0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1fb00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1fb10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1fb20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1fb30 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
1fb40 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
1fb50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fb60 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
1fb70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1fb80 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1fb90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fba0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
1fbb0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1fbc0 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
1fbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1fbe0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1fbf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fc00 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
1fc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1fc20 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1fc30 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
1fc40 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
1fc50 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1fc60 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1fc70 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
1fc80 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
1fc90 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
1fca0 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
1fcb0 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
1fcc0 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
1fcd0 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
1fce0 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
1fcf0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1fd00 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
1fd10 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
1fd20 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1fd30 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1fd40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
1fd50 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
1fd60 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
1fd70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1fd80 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
1fd90 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
1fda0 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
1fdb0 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
1fdc0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1fdd0 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
1fde0 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
1fdf0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
1fe00 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
1fe10 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
1fe20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
1fe30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1fe40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1fe50 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1fe60 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
1fe70 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1fe80 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
1fe90 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
1fea0 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
1feb0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
1fec0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
1fed0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1fee0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1fef0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
1ff20 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
1ff30 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
1ff40 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
1ff50 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
1ff60 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1ff70 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
1ff80 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1ff90 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1ffa0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1ffb0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
1ffc0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
1ffd0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
1ffe0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
1fff0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
20000 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
20010 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
20020 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
20030 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
20040 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
20050 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
20060 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
20070 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
20080 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
20090 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
200a0 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
200b0 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
200c0 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
200d0 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
200e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
200f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20100 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
20110 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
20120 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
20130 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
20140 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
20150 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
20160 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
20170 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
20180 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
20190 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
201a0 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
201b0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
201c0 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
201d0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
201e0 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
201f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20200 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
20210 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
20220 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
20230 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
20240 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
20250 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
20260 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
20270 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
20280 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
20290 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
202a0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
202b0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
202d0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
202e0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
202f0 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
20300 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
20310 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
20320 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
20330 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
20340 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
20350 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
20360 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
20370 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
20380 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
20390 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
203a0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
203b0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
203c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
203d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
203e0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
203f0 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
20400 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
20410 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20420 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
20430 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
20440 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
20450 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
20460 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
20470 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
20480 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
20490 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
204a0 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
204b0 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
204c0 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
204d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
204e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
204f0 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
20500 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
20510 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
20520 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
20530 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
20540 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
20550 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
20560 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
20570 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
20580 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
20590 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
205a0 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
205b0 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
205c0 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
205d0 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
205e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
205f0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
20600 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
20610 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
20620 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
20630 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
20640 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
20650 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
20660 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
20670 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
20680 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
20690 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
206a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
206b0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
206c0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
206d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206e0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
206f0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
20700 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
20710 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
20720 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
20730 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
20740 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
20750 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
20760 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
20770 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
20780 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
20790 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
207a0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
207b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
207c0 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
207d0 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
207e0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
207f0 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
20800 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
20810 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
20820 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
20830 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
20840 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
20850 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
20860 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
20870 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
20880 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
20890 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
208a0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
208b0 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
208c0 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
208d0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
208e0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
208f0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
20900 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
20910 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
20920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20970 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
20980 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
20990 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
209a0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
209b0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
209c0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
209d0 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
209e0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
209f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
20a00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
20a10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
20a20 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
20a30 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
20a40 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
20a50 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
20a60 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
20a70 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
20a80 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
20a90 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
20aa0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
20ab0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
20ac0 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
20ad0 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
20ae0 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
20af0 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
20b00 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
20b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20b70 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
20b80 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
20b90 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
20ba0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
20bb0 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
20bc0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
20bd0 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
20be0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
20bf0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20c00 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20c10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
20c20 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
20c30 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
20c40 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
20c50 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
20c60 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
20c70 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
20c80 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
20c90 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
20ca0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
20cb0 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
20cc0 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
20cd0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
20ce0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
20cf0 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
20d00 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
20d10 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
20d20 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
20d30 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
20d40 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
20d50 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
20d60 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
20d70 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
20d80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
20d90 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
20da0 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
20db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20dd0 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
20de0 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
20df0 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
20e00 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
20e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20e20 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
20e30 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
20e40 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
20e50 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
20e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20e70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
20e80 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
20e90 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
20ea0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
20eb0 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
20ec0 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
20ed0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20ee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f10 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
20f20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
20f30 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
20f40 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
20f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f60 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
20f70 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
20f80 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
20f90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
20fa0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
20fb0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
20fc0 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
20fd0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
20fe0 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
20ff0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
21000 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
21010 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
21020 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
21030 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
21040 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
21050 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21060 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
21070 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
21080 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
21090 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
210a0 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  _none(..        
210b0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
210c0 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
210d0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f  SQLITE_CONFIG_NO
210e0 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  NE);....        
210f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
21100 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
21110 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a  rCode.Misuse);..
21120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
21130 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
21140 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
21150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21160 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
21170 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62  bled = savedEnab
21180 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
21190 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
211a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
211b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21210 23 69 66 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f  #if USE_INTEROP_
21220 44 4c 4c 20 26 26 20 49 4e 54 45 52 4f 50 5f 4c  DLL && INTEROP_L
21230 4f 47 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  OG..    internal
21240 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72   static SQLiteEr
21250 72 6f 72 43 6f 64 65 20 43 6f 6e 66 69 67 75 72  rorCode Configur
21260 65 4c 6f 67 46 6f 72 49 6e 74 65 72 6f 70 28 0d  eLogForInterop(.
21270 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
21280 63 6c 61 73 73 4e 61 6d 65 0d 0a 20 20 20 20 20  className..     
21290 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
212a0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
212b0 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
212c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
212d0 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67  lite3_config_log
212e0 5f 69 6e 74 65 72 6f 70 28 29 3b 0d 0a 0d 0a 20  _interop();.... 
212f0 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
21300 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21310 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
21330 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
21340 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c  .sqlite3_log(rc,
21350 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54   SQLiteConvert.T
21360 6f 55 54 46 38 28 0d 0a 20 20 20 20 20 20 20 20  oUTF8(..        
21370 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65          HelperMe
21380 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
21390 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  at(CultureInfo.I
213a0 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
213b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213c0 20 20 20 20 20 20 22 6c 6f 67 67 69 6e 67 20 69        "logging i
213d0 6e 69 74 69 61 6c 69 7a 65 64 20 76 69 61 20 5c  nitialized via \
213e0 22 7b 30 7d 5c 22 2e 22 2c 20 63 6c 61 73 73 4e  "{0}\".", classN
213f0 61 6d 65 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  ame)));..       
21400 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
21410 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
21420 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
21430 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21440 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
21450 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
21460 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
21470 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
21480 63 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  c;..    }..#endi
21490 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  f....    ///////
214a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21500 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
21510 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75     /// Helper fu
21520 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  nction to retrie
21530 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64  ve a column of d
21540 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69  ata from an acti
21550 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ve statement... 
21560 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
21570 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
21580 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
21590 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
215a0 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75  g step()'d throu
215b0 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  gh</param>..    
215c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
215d0 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  "flags">The flag
215e0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
215f0 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  h the connection
21600 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
21610 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21620 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
21630 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
21640 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
21650 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
21660 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
21670 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
21680 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
21690 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
216a0 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
216b0 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
216c0 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
216d0 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
216e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
216f0 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
21700 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
21710 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
21720 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
21730 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
21740 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
21750 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
21760 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
21770 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
21780 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70  , SQLiteType typ
21790 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
217a0 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
217b0 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b   = typ.Affinity;
217c0 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66 66 20  ..      if (aff 
217d0 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
217e0 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42 4e  Null) return DBN
217f0 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
21800 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b    Type t = null;
21810 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  ....      if (ty
21820 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65  p.Type != DbType
21830 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
21840 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53  {..        t = S
21850 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
21860 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
21870 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66  p);..        aff
21880 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74   = TypeToAffinit
21890 79 28 74 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20  y(t, flags);..  
218a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
218b0 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
218c0 2e 48 61 73 46 6c 61 67 73 28 66 6c 61 67 73 2c  .HasFlags(flags,
218d0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
218e0 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54  nFlags.GetAllAsT
218f0 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
21900 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
21910 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
21920 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
21930 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
21940 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
21950 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
21960 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
21970 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
21980 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
21990 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
219a0 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
219b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
219c0 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
219d0 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
219e0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
219f0 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
21a00 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
21a10 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
21a20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
21a30 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
21a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
21a50 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
21a60 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
21a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
21a80 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
21a90 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
21aa0 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
21ab0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
21ac0 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
21ad0 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
21ae0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
21af0 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
21b00 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
21b10 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
21b20 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
21b30 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
21b40 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
21b50 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
21b60 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
21b70 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
21b80 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21b90 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
21ba0 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
21bb0 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
21bc0 6e 64 65 78 29 2c 20 74 2c 0d 0a 20 20 20 20 20  ndex), t,..     
21bd0 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d           HelperM
21be0 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28  ethods.HasFlags(
21bf0 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e  flags, SQLiteCon
21c00 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
21c10 49 6e 76 61 72 69 61 6e 74 44 6f 75 62 6c 65 29  InvariantDouble)
21c20 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
21c30 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
21c40 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
21c50 72 65 20 3a 20 43 75 6c 74 75 72 65 49 6e 66 6f  re : CultureInfo
21c60 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
21c70 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
21c80 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
21c90 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  64:..          i
21ca0 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
21cb0 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
21cc0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
21cd0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
21ce0 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
21cf0 20 72 65 74 75 72 6e 20 47 65 74 42 6f 6f 6c 65   return GetBoole
21d00 61 6e 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  an(stmt, index);
21d10 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
21d20 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79 74  t == typeof(SByt
21d30 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53 42  e)) return GetSB
21d40 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
21d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
21d60 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79 74  (t == typeof(Byt
21d70 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 79  e)) return GetBy
21d80 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te(stmt, index);
21d90 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
21da0 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 31  t == typeof(Int1
21db0 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  6)) return GetIn
21dc0 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
21dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
21de0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
21df0 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74  t16)) return Get
21e00 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  UInt16(stmt, ind
21e10 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
21e20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
21e30 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47  Int32)) return G
21e40 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
21e50 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
21e60 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
21e70 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e  (UInt32)) return
21e80 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74 2c   GetUInt32(stmt,
21e90 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
21ea0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
21eb0 65 6f 66 28 49 6e 74 36 34 29 29 20 72 65 74 75  eof(Int64)) retu
21ec0 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
21ed0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21ee0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
21ef0 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65  peof(UInt64)) re
21f00 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73  turn GetUInt64(s
21f10 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
21f20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
21f30 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
21f40 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
21f50 20 69 6e 64 65 78 29 2c 20 74 2c 0d 0a 20 20 20   index), t,..   
21f60 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70 65             Helpe
21f70 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
21f80 73 28 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43  s(flags, SQLiteC
21f90 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
21fa0 65 74 49 6e 76 61 72 69 61 6e 74 49 6e 74 36 34  etInvariantInt64
21fb0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
21fc0 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
21fd0 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
21fe0 75 72 65 20 3a 20 43 75 6c 74 75 72 65 49 6e 66  ure : CultureInf
21ff0 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
22000 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  );..        defa
22010 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
22020 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
22030 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
22040 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
22050 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
22060 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75 72  rride int GetCur
22070 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69  sorForTable(SQLi
22080 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
22090 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f  , int db, int ro
220a0 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  otPage)..    {..
220b0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
220c0 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75  DARD..      retu
220d0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
220e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
220f0 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65  able_cursor_inte
22100 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
22110 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50  _stmt, db, rootP
22120 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
22130 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
22140 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
22150 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
22160 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52  erride long GetR
22170 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51  owIdForCursor(SQ
22180 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
22190 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d  mt, int cursor).
221a0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
221b0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
221c0 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 20 3d      long rowid =
221d0 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
221e0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
221f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
22200 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73  ods.sqlite3_curs
22210 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  or_rowid_interop
22220 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
22230 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72 65 66 20  mt, cursor, ref 
22240 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
22250 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
22260 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74  rrorCode.Ok) ret
22270 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20  urn rowid;....  
22280 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
22290 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
222a0 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
222b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
222c0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
222d0 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d  id GetIndexColum
222e0 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74  nExtendedInfo(st
222f0 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73  ring database, s
22300 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72  tring index, str
22310 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20  ing column, ref 
22320 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65  int sortMode, re
22330 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 72  f int onError, r
22340 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ef string collat
22350 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20  ionSequence)..  
22360 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
22370 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
22380 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20 3d 20 49   IntPtr coll = I
22390 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
223a0 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d     int colllen =
223b0 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
223c0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a  eErrorCode rc;..
223d0 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73  ..      rc = Uns
223e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
223f0 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
22400 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72  olumn_info_inter
22410 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
22420 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46  database), ToUTF
22430 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38  8(index), ToUTF8
22440 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 73 6f  (column), ref so
22450 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f 6e 45 72  rtMode, ref onEr
22460 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c 2c 20 72  ror, ref coll, r
22470 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20  ef colllen);..  
22480 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
22490 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
224a0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
224b0 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
224c0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
224d0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
224e0 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
224f0 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
22500 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
22510 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
22520 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
22530 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
22540 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
22550 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
22560 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
22570 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
22580 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
22590 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67  leControl(string
225a0 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70   zDbName, int op
225b0 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a  , IntPtr pArg)..
225c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
225d0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
225e0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
225f0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71  file_control(_sq
22600 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e  l, (zDbName != n
22610 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44  ull) ? ToUTF8(zD
22620 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f  bName) : null, o
22630 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d  p, pArg);..    }
22640 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..