System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8ede7d05cc372880e4739684544a068b284ea228:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0690: 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
06a0: 69 73 20 75 73 65 64 20 74 6f 20 72 65 66 65 72  is used to refer
06b0: 20 74 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   to memory alloc
06c0: 61 74 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ated for the..  
06d0: 20 20 2f 2f 2f 20 53 51 4c 49 54 45 5f 44 42 43    /// SQLITE_DBC
06e0: 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45  ONFIG_MAINDBNAME
06f0: 20 76 61 6c 75 65 20 75 73 65 64 20 77 69 74 68   value used with
0700: 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20   the native..   
0710: 20 2f 2f 2f 20 22 73 71 6c 69 74 65 33 5f 64 62   /// "sqlite3_db
0720: 5f 63 6f 6e 66 69 67 22 20 41 50 49 2e 20 20 49  _config" API.  I
0730: 66 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  f allocated, the
0740: 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
0750: 20 2f 2f 2f 20 6d 65 6d 65 6f 72 79 20 77 69 6c   /// memeory wil
0760: 6c 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  l be freed when 
0770: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0780: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20  onnection is..  
0790: 20 20 2f 2f 2f 20 63 6c 6f 73 65 64 2e 0d 0a 20    /// closed... 
07a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07b0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 49  >..    private I
07c0: 6e 74 50 74 72 20 64 62 4e 61 6d 65 20 3d 20 49  ntPtr dbName = I
07d0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
07e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f     //..    // NO
07f0: 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
0800: 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20 74  public key for t
0810: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
0820: 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e 20  QLite assembly. 
0830: 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20 74   If you change t
0840: 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20 20  he..    //      
0850: 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20 77   SNK file, you w
0860: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61 6e  ill need to chan
0870: 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c 2e  ge this as well.
0880: 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69 6e  ..    //..    in
0890: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
08a0: 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d 0d  ing PublicKey =.
08b0: 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30 30  .        "002400
08c0: 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30 30  0004800000940000
08d0: 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30 30  0006020000002400
08e0: 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30 30  0052534131000400
08f0: 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38 38  000100010005a288
0900: 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a 20  de5687c4e1" +.. 
0910: 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66 66         "b621ddff
0920: 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39 39  5d84472741895699
0930: 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34 31  7f475eb829429e41
0940: 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64 65  1aff3e93f97b70de
0950: 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64 64  698b972640925bdd
0960: 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20 20  44280df0" +..   
0970: 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36 36       "a25a843266
0980: 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37 34  973704137cbb0e74
0990: 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34 30  41c1fe7cae4e2440
09a0: 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66 65  ae91ab8cde3933fe
09b0: 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30 65  bcb1ac48dd33b40e
09c0: 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20 20  13c421" +..     
09d0: 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33 34     "d8215c18a434
09e0: 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38 35  9a436dd499e3c385
09f0: 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63 31  cc683015f886f6c1
0a00: 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31 62  0bd90115eb2bd61b
0a10: 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34 31  67750839e3a19941
0a20: 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21 50  dc9c";....#if !P
0a30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
0a40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69 6e  RAMEWORK..    in
0a50: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
0a60: 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72 73  ing DesignerVers
0a70: 69 6f 6e 20 3d 20 22 31 2e 30 2e 31 30 39 2e 30  ion = "1.0.109.0
0a80: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0a90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0aa0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0ab0: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0ac0: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0ad0: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0ae0: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0af0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0b00: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
0b20: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
0b30: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
0b40: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
0b50: 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74   protected SQLit
0b60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
0b70: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 70 72   _flags;..    pr
0b80: 69 76 61 74 65 20 62 6f 6f 6c 20 5f 73 65 74 4c  ivate bool _setL
0b90: 6f 67 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20  ogCallback;..   
0ba0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
0bb0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
0bc0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0bd0: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  olVersion;..    
0be0: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 63 61 6e  private int _can
0bf0: 63 65 6c 43 6f 75 6e 74 3b 0d 0a 0d 0a 23 69 66  celCount;....#if
0c00: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
0c10: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20  40 || NET_45 || 
0c20: 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34  NET_451 || NET_4
0c30: 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20  52 || NET_46 || 
0c40: 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34  NET_461 || NET_4
0c50: 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20  62 || NET_47 || 
0c60: 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45 54 5f 34  NET_471 || NET_4
0c70: 37 32 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  72) && !PLATFORM
0c80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0c90: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0ca0: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0cb0: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0cc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0ce0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0cf0: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0d00: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0d10: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0d20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0d30: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0d40: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0d50: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0d60: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0d70: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0d80: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0d90: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0da0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0db0: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
0dc0: 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
0dd0: 69 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74  ibrary file that
0de0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the.. 
0df0: 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20     /// "vtshim" 
0e00: 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70  extension [wrapp
0e10: 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  er]...    /// </
0e20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0e30: 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f  otected string _
0e40: 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c  shimExtensionFil
0e50: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
0e60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0e70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
0e80: 20 69 73 20 74 68 65 20 66 6c 61 67 20 69 6e 64   is the flag ind
0e90: 69 63 61 74 65 20 77 68 65 74 68 65 72 20 74 68  icate whether th
0ea0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
0eb0: 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20 20 20   file that..    
0ec0: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  /// contains the
0ed0: 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73   "vtshim" extens
0ee0: 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79 6e 61  ion must be dyna
0ef0: 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
0f00: 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
0f10: 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f 20 75  class prior to u
0f20: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0f40: 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68  tected bool? _sh
0f50: 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  imIsLoadNeeded =
0f60: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   null;....    //
0f70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0f80: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0f90: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0fa0: 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ive entry point 
0fb0: 66 6f 72 20 74 68 65 20 22 76 74 73 68 69 6d 22  for the "vtshim"
0fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
0fd0: 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a  ion [wrapper]...
0fe0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ff0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
1000: 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78  d string _shimEx
1010: 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
1020: 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  = "sqlite3_vtshi
1030: 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20  m_init";....    
1040: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1050: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
1060: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
1070: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1080: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1090: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
10a0: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
10b0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
10c0: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
10d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1140: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1150: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
1160: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
1170: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
1180: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
1190: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11a0: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
11b0: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
11c0: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
11d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11f0: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
1200: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
1210: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
1220: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
1230: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
1240: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
1250: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
1260: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
1270: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
1280: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1290: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
12a0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
12b0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
12c0: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
12d0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
12e0: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
12f0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1300: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1310: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1320: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
1330: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
1340: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1350: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
1360: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
1370: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
1380: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1390: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
13a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
13b0: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
13c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
13d0: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
13e0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1400: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
1410: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1420: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1430: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
1440: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
1450: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
1460: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1470: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
1480: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
1490: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14b0: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
14c0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
14d0: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
14e0: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
14f0: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1500: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
1510: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
1520: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
1530: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
1540: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
1550: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1560: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1570: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1580: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1590: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
15a0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
15b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
15c0: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
15d0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
15e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
15f0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1600: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
1610: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1620: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
1630: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
1640: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1650: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
1660: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1680: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1690: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
16a0: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
16b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
16c0: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
16d0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
16e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
16f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1700: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1710: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1730: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1740: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
1750: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1770: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75    null, null, nu
1780: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1790: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
17a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17b0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
17c0: 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20  e3), fmt, kind, 
17d0: 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66  fmtString, db, f
17e0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
17f0: 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e            ownHan
1800: 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  dle }));..      
1810: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1890: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
18a0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
18b0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18c0: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
18d0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
18e0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
18f0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
1900: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
1910: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
1920: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
1930: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1940: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1950: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1960: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1970: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1980: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19f0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
1a00: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
1a10: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
1a20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a30: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a50: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1a60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1a80: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ab0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1af0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1b00: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1b10: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1b60: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1bb0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1bc0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1bd0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
1c20: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1c30: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1c40: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1c50: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 43 6c 6f 73 65 28 74 72 75 65 29 3b 20 2f 2a 20  Close(true); /* 
1c80: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1c90: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1ca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1cc0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1ce0: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1cf0: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1d00: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d10: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d20: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
1d30: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
1d40: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
1d50: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
1d60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d70: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1d80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1da0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1e10: 20 44 45 42 55 47 0d 0a 20 20 20 20 70 75 62 6c   DEBUG..    publ
1e20: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
1e30: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
1e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1e50: 74 75 72 6e 20 48 65 6c 70 65 72 4d 65 74 68 6f  turn HelperMetho
1e60: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
1e80: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1e90: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 66 69 6c  antCulture, "fil
1ea0: 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 6c 61  eName = {0}, fla
1eb0: 67 73 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  gs = {1}",..    
1ec0: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
1ed0: 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20 20  e, _flags);..   
1ee0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1ef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1f60: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1f70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1f80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1f90: 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
1fa0: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c  to dispose of al
1fb0: 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
1fc0: 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f  "SQLiteModule" /
1fd0: 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f  > derived..    /
1fe0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
1ff0: 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73  ces currently as
2000: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
2010: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
2020: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
2030: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2040: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  >..    private v
2050: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
2060: 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
2070: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2080: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79   // NOTE: If any
2090: 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72   modules were cr
20a0: 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74  eated, attempt t
20b0: 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20  o dispose of..  
20c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
20d0: 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63  hem now.  This c
20e0: 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  ode is designed 
20f0: 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e  to avoid throwin
2100: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  g..        //   
2110: 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75      exceptions u
2120: 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73  nless the Dispos
2130: 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  e method of the 
2140: 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
2150: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
2160: 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  throws an except
2170: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
2180: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d  ..        if (_m
2190: 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  odules != null).
21a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21b0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
21c0: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74  (KeyValuePair<st
21d0: 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75  ring, SQLiteModu
21e0: 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64  le> pair in _mod
21f0: 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ules)..         
2200: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2210: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
2220: 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72  le module = pair
2230: 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  .Value;....     
2240: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2250: 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
2280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2290: 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
22a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22c0: 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28   _modules.Clear(
22d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
22e0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
22f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
2360: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
2370: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
2380: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
2390: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
23a0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
23b0: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
23c0: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
23d0: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
23e0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
23f0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
2400: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
2410: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
2420: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
2430: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
2440: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
2450: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
2460: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
2470: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
2480: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
2490: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
24a0: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
24b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
24c0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
24d0: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
24e0: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
24f0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2500: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
2510: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
2520: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
2530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2540: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2550: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
2560: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
2570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2580: 20 20 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e        bool unbin
2590: 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 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 20 20  ..              
19900 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19910 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76           if (!(v
19920 61 6c 75 65 20 69 73 20 62 6f 6f 6c 29 29 0d 0a  alue is bool))..
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19960 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19970 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
19980 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
19990 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
199c0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
199f0 69 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20  iguration value 
19a00 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
19a10 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
19a20 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29 29 29    typeof(bool)))
19a50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19a60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 20  int result = 0; 
19a90 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a  /* NOT USED */..
19aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ab0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
19ac0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
19ad0 2e 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  .sqlite3_db_conf
19ae0 69 67 5f 69 6e 74 5f 72 65 66 69 6e 74 28 0d 0a  ig_int_refint(..
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70          _sql, op
19b10 74 69 6f 6e 2c 20 28 28 62 6f 6f 6c 29 76 61 6c  tion, ((bool)val
19b20 75 65 20 3f 20 31 20 3a 20 30 29 2c 20 72 65 66  ue ? 1 : 0), ref
19b30 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20   result);..     
19b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19b50 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
19b60 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
19b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19b80 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
19b90 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
19ba0 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
19bb0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
19bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bd0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
19be0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
19bf0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19c10 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 66  unsupported conf
19c20 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
19c30 20 7b 30 7d 22 2c 20 6f 70 74 69 6f 6e 29 29 3b   {0}", option));
19c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
19c60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
19c70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
19c80 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
19c90 69 73 61 62 6c 65 73 20 65 78 74 65 6e 73 69 6f  isables extensio
19ca0 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c  n loading by SQL
19cb0 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ite...    /// </
19cc0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
19cd0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
19ce0 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f  OnOff">..    ///
19cf0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
19d00 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e  loading of exten
19d10 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20  sions, false to 
19d20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  disable...    //
19d30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19d40 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
19d50 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78  e void SetLoadEx
19d60 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e  tension(bool bOn
19d70 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
19d80 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
19d90 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
19da0 20 20 20 69 66 20 28 53 51 4c 69 74 65 56 65 72     if (SQLiteVer
19db0 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30  sionNumber >= 30
19dc0 31 33 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20  13000)..        
19dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
19de0 20 3d 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74   = SetConfigurat
19df0 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20  ionOption(..    
19e00 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
19e10 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19e20 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19e30 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
19e40 54 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  TENSION,..      
19e50 20 20 20 20 20 20 20 20 20 20 62 4f 6e 4f 66 66            bOnOff
19e60 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
19e70 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19e80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19e90 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
19ea0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19eb0 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
19ec0 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
19ee0 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
19ef0 20 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   0));..        }
19f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
19f10 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
19f20 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
19f30 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
19f40 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
19f50 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
19f60 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
19f70 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64  y>..    /// Load
19f80 73 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e  s a SQLite exten
19f90 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f  sion library fro
19fa0 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65  m the named file
19fb0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
19fc0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
19fd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65  param name="file
19fe0 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
19ff0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1a000 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62  dynamic link lib
1a010 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69  rary file contai
1a020 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69  ning the extensi
1a030 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  on...    /// </p
1a040 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1a050 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63  param name="proc
1a060 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
1a070 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1a080 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f  exported functio
1a090 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61  n used to initia
1a0a0 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69  lize the extensi
1a0b0 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  on...    /// If 
1a0c0 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c  null, the defaul
1a0d0 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  t "sqlite3_exten
1a0e0 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20  sion_init" will 
1a0f0 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  be used...    //
1a100 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1a110 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a120 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e  e void LoadExten
1a130 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65  sion(string file
1a140 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f  Name, string pro
1a150 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  cName)..    {.. 
1a160 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e         if (fileN
1a170 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
1a180 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1a190 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
1a1a0 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e  Exception("fileN
1a1b0 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
1a1c0 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20    IntPtr pError 
1a1d0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1a1e0 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
1a1f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a200 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66        byte[] utf
1a210 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38  8FileName = UTF8
1a220 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
1a230 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20  tBytes(fileName 
1a240 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20  + '\0');..      
1a250 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66        byte[] utf
1a260 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c  8ProcName = null
1a270 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a280 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d   if (procName !=
1a290 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a2a0 20 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63          utf8Proc
1a2b0 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
1a2c0 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
1a2d0 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30  s(procName + '\0
1a2e0 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
1a2f0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1a300 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
1a310 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a320 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
1a330 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1a340 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69      _sql, utf8Fi
1a350 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63  leName, utf8Proc
1a360 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72  Name, ref pError
1a370 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a380 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
1a390 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1a3c0 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46  Exception(n, UTF
1a3d0 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72  8ToString(pError
1a3e0 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  , -1));..       
1a3f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
1a400 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
1a410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a420 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
1a430 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1a440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a450 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1a460 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a470 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b  e3_free(pError);
1a480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a490 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74    pError = IntPt
1a4a0 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
1a4b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a4c0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1a4d0 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
1a4e0 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64  isabled extended
1a4f0 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65   result codes re
1a500 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65  turned by SQLite
1a510 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a520 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1a530 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
1a540 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29  des(bool bOnOff)
1a550 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
1a560 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
1a570 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1a580 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
1a590 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
1a5a0 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  odes(..         
1a5b0 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
1a5c0 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
1a5d0 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
1a5e0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1a5f0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1a600 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
1a610 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1a620 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
1a630 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
1a640 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ite error code..
1a650 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a660 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
1a670 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65  rCode ResultCode
1a680 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1a690 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1a6a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a6b0 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c  te3_errcode(_sql
1a6c0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f  );..    }..    /
1a6d0 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74  // Gets the last
1a6e0 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64   SQLite extended
1a6f0 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20   error code..   
1a700 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1a710 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
1a720 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c  de ExtendedResul
1a730 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
1a740 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1a750 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1a760 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
1a770 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  d_errcode(_sql);
1a780 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a790 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73  // Add a log mes
1a7a0 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c  sage via the SQL
1a7b0 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20  ite sqlite3_log 
1a7c0 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
1a7d0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a7e0 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67  e void LogMessag
1a7f0 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
1a800 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
1a810 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20  ng zMessage)..  
1a820 20 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69    {..      Stati
1a830 63 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72  cLogMessage(iErr
1a840 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b  Code, zMessage);
1a850 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a860 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73  // Add a log mes
1a870 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c  sage via the SQL
1a880 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20  ite sqlite3_log 
1a890 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
1a8a0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
1a8b0 76 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65  void StaticLogMe
1a8c0 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f  ssage(SQLiteErro
1a8d0 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20  rCode iErrCode, 
1a8e0 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29  string zMessage)
1a8f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
1a900 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a910 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69  ds.sqlite3_log(i
1a920 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28  ErrCode, ToUTF8(
1a930 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20  zMessage));..   
1a940 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
1a950 50 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52  P_CODEC || INTER
1a960 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a  OP_INCLUDE_SEE..
1a970 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a980 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61  rride void SetPa
1a990 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61  ssword(byte[] pa
1a9a0 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
1a9b0 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
1a9c0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
1a9d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a9e0 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f  ds.sqlite3_key(_
1a9f0 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74  sql, passwordByt
1aa00 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  es, passwordByte
1aa10 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
1aa20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
1aa30 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
1aa40 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1aa50 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
1aa60 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
1aa70 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1aa80 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ol)..      {..  
1aa90 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
1aaa0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21   false;....#if !
1aab0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1aac0 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1aad0 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
1aae0 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
1aaf0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
1ab00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1ab10 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
1ab20 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
1ab30 20 20 20 20 20 20 20 20 20 20 22 53 65 74 50 61            "SetPa
1ab40 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20 44 69  ssword (Pool) Di
1ab50 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20  sabled: {0}",.. 
1ab60 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54           HandleT
1ab70 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65  oString()));..#e
1ab80 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ndif..      }.. 
1ab90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1aba0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1abb0 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72  id ChangePasswor
1abc0 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73  d(byte[] newPass
1abd0 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
1abe0 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
1abf0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
1ac00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1ac10 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f  .sqlite3_rekey(_
1ac20 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64  sql, newPassword
1ac30 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77  Bytes, (newPassw
1ac40 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c  ordBytes == null
1ac50 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77  ) ? 0 : newPassw
1ac60 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29  ordBytes.Length)
1ac70 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
1ac80 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1ac90 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
1aca0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1acb0 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
1acc0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ));....      if 
1acd0 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
1ace0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75 73    {..        _us
1acf0 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  ePool = false;..
1ad00 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1ad10 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1ad20 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1ad30 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
1ad40 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
1ad50 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
1ad60 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
1ad70 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
1ad80 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
1ad90 20 22 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64   "ChangePassword
1ada0 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64   (Pool) Disabled
1adb0 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1adc0 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
1add0 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
1ade0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1adf0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e  #endif....    in
1ae00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1ae10 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73 73  void SetProgress
1ae20 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53  Hook(int nOps, S
1ae30 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c  QLiteProgressCal
1ae40 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
1ae50 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61   {..        Unsa
1ae60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1ae70 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73  sqlite3_progress
1ae80 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20 6e  _handler(_sql, n
1ae90 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  Ops, func, IntPt
1aea0 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
1aeb0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1aec0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1aed0 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28  tAuthorizerHook(
1aee0 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72  SQLiteAuthorizer
1aef0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
1af00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
1af10 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1af20 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  .sqlite3_set_aut
1af30 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75  horizer(_sql, fu
1af40 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
1af50 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1af60 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1af70 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65  e void SetUpdate
1af80 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74  Hook(SQLiteUpdat
1af90 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
1afa0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
1afb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1afc0 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65  s.sqlite3_update
1afd0 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
1afe0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
1aff0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1b000 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1b010 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f  void SetCommitHo
1b020 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43  ok(SQLiteCommitC
1b030 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
1b040 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
1b050 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1b060 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68  sqlite3_commit_h
1b070 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
1b080 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
1b090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1b0a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1b0b0 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62  id SetTraceCallb
1b0c0 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43  ack(SQLiteTraceC
1b0d0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
1b0e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
1b0f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1b100 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73  sqlite3_trace(_s
1b110 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
1b120 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
1b130 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b140 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1b150 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 32 28 53  TraceCallback2(S
1b160 51 4c 69 74 65 54 72 61 63 65 46 6c 61 67 73 20  QLiteTraceFlags 
1b170 6d 61 73 6b 2c 20 53 51 4c 69 74 65 54 72 61 63  mask, SQLiteTrac
1b180 65 43 61 6c 6c 62 61 63 6b 32 20 66 75 6e 63 29  eCallback2 func)
1b190 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1b1a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1b1b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61  hods.sqlite3_tra
1b1c0 63 65 5f 76 32 28 5f 73 71 6c 2c 20 6d 61 73 6b  ce_v2(_sql, mask
1b1d0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
1b1e0 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
1b1f0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1b200 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f  rride void SetRo
1b210 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74  llbackHook(SQLit
1b220 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  eRollbackCallbac
1b230 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
1b240 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
1b250 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1b260 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28  3_rollback_hook(
1b270 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
1b280 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
1b290 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1b2a0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
1b2b0 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e  llows the settin
1b2c0 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63  g of a logging c
1b2d0 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20  allback invoked 
1b2e0 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61  by SQLite when a
1b2f0 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76  ..    /// log ev
1b300 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c  ent occurs.  Onl
1b310 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d  y one callback m
1b320 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e  ay be set.  If N
1b330 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a  ULL is passed,..
1b340 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67      /// the logg
1b350 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  ing callback is 
1b360 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20  unregistered... 
1b370 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1b380 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1b390 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68  m name="func">Th
1b3a0 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  e callback funct
1b3b0 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f  ion to invoke.</
1b3c0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1b3d0 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
1b3e0 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f   a result code</
1b3f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1b400 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1b410 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1b420 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53  SetLogCallback(S
1b430 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b  QLiteLogCallback
1b440 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1b450 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1b460 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
1b470 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1b480 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c  sqlite3_config_l
1b490 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og(..           
1b4a0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
1b4b0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
1b4c0 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e  IG_LOG, func, In
1b4d0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20  tPtr.Zero);.... 
1b4e0 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
1b4f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1b500 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
1b510 20 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61 63    _setLogCallbac
1b520 6b 20 3d 20 28 66 75 6e 63 20 21 3d 20 6e 75 6c  k = (func != nul
1b530 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  l);....        r
1b540 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
1b550 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
1b5c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1b5d0 20 20 2f 2f 2f 20 41 70 70 65 6e 64 73 20 61 6e    /// Appends an
1b5e0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 61   error message a
1b5f0 6e 64 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  nd an appropriat
1b600 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 20 74 6f  e line-ending to
1b610 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74   a <see cref="St
1b620 72 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e 0d  ringBuilder" />.
1b630 0a 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63  .    /// instanc
1b640 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 66  e.  This is usef
1b650 75 6c 20 62 65 63 61 75 73 65 20 74 68 65 20 2e  ul because the .
1b660 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d  NET Compact Fram
1b670 65 77 6f 72 6b 20 68 61 73 20 61 20 73 6c 69 67  ework has a slig
1b680 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20 73  htly different s
1b690 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 73  et..    /// of s
1b6a0 75 70 70 6f 72 74 65 64 20 6d 65 74 68 6f 64 73  upported methods
1b6b0 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72   for the <see cr
1b6c0 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c 64 65  ef="StringBuilde
1b6d0 72 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  r" /> class...  
1b6e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1b6f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1b700 20 6e 61 6d 65 3d 22 62 75 69 6c 64 65 72 22 3e   name="builder">
1b710 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
1b720 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 42  ee cref="StringB
1b730 75 69 6c 64 65 72 22 20 2f 3e 20 69 6e 73 74 61  uilder" /> insta
1b740 6e 63 65 20 74 6f 20 61 70 70 65 6e 64 20 74 6f  nce to append to
1b750 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1b760 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1b770 72 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61 67  ram name="messag
1b780 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
1b790 20 6d 65 73 73 61 67 65 20 74 6f 20 61 70 70 65   message to appe
1b7a0 6e 64 2e 20 20 49 74 20 77 69 6c 6c 20 62 65 20  nd.  It will be 
1b7b0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 61  followed by an a
1b7c0 70 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65 2d  ppropriate line-
1b7d0 65 6e 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f  ending...    ///
1b7e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
1b7f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
1b800 69 64 20 41 70 70 65 6e 64 45 72 72 6f 72 28 0d  id AppendError(.
1b810 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
1b820 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 2c 0d  uilder builder,.
1b830 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
1b840 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20  message..       
1b850 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
1b860 20 20 20 69 66 20 28 62 75 69 6c 64 65 72 20 3d     if (builder =
1b870 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1b880 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
1b890 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
1b8a0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
1b8b0 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
1b8c0 41 70 70 65 6e 64 4c 69 6e 65 28 6d 65 73 73 61  AppendLine(messa
1b8d0 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ge);..#else..   
1b8e0 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
1b8f0 65 6e 64 28 6d 65 73 73 61 67 65 29 3b 0d 0a 20  end(message);.. 
1b900 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
1b910 70 70 65 6e 64 28 22 5c 72 5c 6e 22 29 3b 0d 0a  ppend("\r\n");..
1b920 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
1b930 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b990 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
1b9a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1b9b0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61  // This method a
1b9c0 74 74 65 6d 70 74 73 20 74 6f 20 63 61 75 73 65  ttempts to cause
1b9d0 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69   the SQLite nati
1b9e0 76 65 20 6c 69 62 72 61 72 79 20 74 6f 20 69 6e  ve library to in
1b9f0 76 61 6c 69 64 61 74 65 0d 0a 20 20 20 20 2f 2f  validate..    //
1ba00 2f 20 69 74 73 20 66 75 6e 63 74 69 6f 6e 20 70  / its function p
1ba10 6f 69 6e 74 65 72 73 20 74 68 61 74 20 72 65 66  ointers that ref
1ba20 65 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 61  er to this insta
1ba30 6e 63 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  nce.  This is ne
1ba40 63 65 73 73 61 72 79 0d 0a 20 20 20 20 2f 2f 2f  cessary..    ///
1ba50 20 74 6f 20 70 72 65 76 65 6e 74 20 63 61 6c 6c   to prevent call
1ba60 73 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63 6f  s from native co
1ba70 64 65 20 69 6e 74 6f 20 64 65 6c 65 67 61 74 65  de into delegate
1ba80 73 20 74 68 61 74 20 6d 61 79 20 68 61 76 65 20  s that may have 
1ba90 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 67 61  been..    /// ga
1baa0 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64 2e  rbage collected.
1bab0 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 73    Normally, thes
1bac0 65 20 74 79 70 65 73 20 6f 66 20 69 73 73 75 65  e types of issue
1bad0 73 20 63 61 6e 20 6f 6e 6c 79 20 61 72 69 73 65  s can only arise
1bae0 20 66 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f   for..    /// co
1baf0 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20 61  nnections that a
1bb00 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
1bb10 70 6f 6f 6c 3b 20 68 6f 77 76 65 72 2c 20 69 74  pool; howver, it
1bb20 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63   is good practic
1bb30 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e  e to..    /// un
1bb40 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20 69 6e  conditionally in
1bb50 76 61 6c 69 64 61 74 65 20 66 75 6e 63 74 69 6f  validate functio
1bb60 6e 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20  n pointers that 
1bb70 6d 61 79 20 72 65 66 65 72 20 74 6f 20 6f 62 6a  may refer to obj
1bb80 65 63 74 73 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  ects..    /// be
1bb90 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
1bba0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1bbb0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1bbc0 6d 20 6e 61 6d 65 3d 22 69 6e 63 6c 75 64 65 47  m name="includeG
1bbd0 6c 6f 62 61 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f  lobal">..    ///
1bbe0 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 6c 73   Non-zero to als
1bbf0 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 67 6c 6f  o invalidate glo
1bc00 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  bal function poi
1bc10 6e 74 65 72 73 20 28 69 2e 65 2e 20 74 68 6f 73  nters (i.e. thos
1bc20 65 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f 20  e that..    /// 
1bc30 61 72 65 20 6e 6f 74 20 64 69 72 65 63 74 6c 79  are not directly
1bc40 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1bc50 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1bc60 20 6f 6e 20 74 68 65 20 6e 61 74 69 76 65 20 73   on the native s
1bc70 69 64 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ide)...    /// <
1bc80 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1bc90 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
1bca0 6e 54 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f 2f  nThrow">..    //
1bcb0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
1bcc0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69  is method is bei
1bcd0 6e 67 20 65 78 65 63 75 74 65 64 20 77 69 74 68  ng executed with
1bce0 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
1bcf0 72 65 20 69 74 20 63 61 6e 0d 0a 20 20 20 20 2f  re it can..    /
1bd00 2f 2f 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  // throw an exce
1bd10 70 74 69 6f 6e 20 69 6e 20 74 68 65 20 65 76 65  ption in the eve
1bd20 6e 74 20 6f 66 20 66 61 69 6c 75 72 65 3b 20 6f  nt of failure; o
1bd30 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
1bd40 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1bd50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1bd60 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
1bd70 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d  n-zero if this m
1bd80 65 74 68 6f 64 20 77 61 73 20 73 75 63 63 65 73  ethod was succes
1bd90 73 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65 2c  sful; otherwise,
1bda0 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20   zero...    /// 
1bdb0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1bdc0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 55 6e 68  private bool Unh
1bdd0 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63  ookNativeCallbac
1bde0 6b 73 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ks(..        boo
1bdf0 6c 20 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 2c  l includeGlobal,
1be00 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63  ..        bool c
1be10 61 6e 54 68 72 6f 77 0d 0a 20 20 20 20 20 20 20  anThrow..       
1be20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
1be30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
1be40 2f 20 4e 4f 54 45 3a 20 49 6e 69 74 69 61 6c 6c  / NOTE: Initiall
1be50 79 2c 20 74 68 69 73 20 6d 65 74 68 6f 64 20 61  y, this method a
1be60 73 73 75 6d 65 73 20 73 75 63 63 65 73 73 2e 20  ssumes success. 
1be70 20 54 68 65 6e 2c 20 69 66 20 61 6e 79 20 61 74   Then, if any at
1be80 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 20 20 2f  tempt..        /
1be90 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 76 61 6c  /       to inval
1bea0 69 64 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  idate a function
1beb0 20 70 6f 69 6e 74 65 72 20 66 61 69 6c 73 2c 20   pointer fails, 
1bec0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
1bed0 6c 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  lt is..        /
1bee0 2f 20 20 20 20 20 20 20 73 65 74 20 74 6f 20 66  /       set to f
1bef0 61 69 6c 75 72 65 2e 20 20 48 6f 77 65 76 65 72  ailure.  However
1bf00 2c 20 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20  , this will not 
1bf10 70 72 65 76 65 6e 74 20 66 75 72 74 68 65 72 0d  prevent further.
1bf20 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1bf30 20 20 61 74 74 65 6d 70 74 73 2c 20 69 66 20 61    attempts, if a
1bf40 6e 79 2c 20 74 6f 20 69 6e 76 61 6c 69 64 61 74  ny, to invalidat
1bf50 65 20 73 75 62 73 65 71 75 65 6e 74 20 66 75 6e  e subsequent fun
1bf60 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 2e 0d  ction pointers..
1bf70 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
1bf80 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74       bool result
1bf90 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1bfa0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1bfb0 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72  e rc = SQLiteErr
1bfc0 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20  orCode.Ok;..    
1bfd0 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
1bfe0 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
1bff0 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
1c000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c060 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c070 20 20 20 23 72 65 67 69 6f 6e 20 52 6f 6c 6c 62     #region Rollb
1c080 61 63 6b 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f  ack Hook (Per-Co
1c090 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  nnection)..     
1c0a0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1c0b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1c0c0 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 6e  etRollbackHook(n
1c0d0 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ull); /* throw *
1c0e0 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69  /..        }..#i
1c0f0 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1c100 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1c110 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63  CTION..        c
1c120 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1c130 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e)..#else..     
1c140 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1c150 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ion)..#endif..  
1c160 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45        {..#if !NE
1c170 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1c180 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1c190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1c1a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1c1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c1c0 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1c1d0 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
1c1e0 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
1c210 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75      "Failed to u
1c240 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68 6f  nset rollback ho
1c250 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ok: {0}",..     
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c270 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
1c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c290 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1c2a0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  h..            {
1c2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c2c0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1c2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c2e0 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
1c2f0 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72         AppendErr
1c300 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69  or(builder, "fai
1c310 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f 6c  led to unset rol
1c320 6c 62 61 63 6b 20 68 6f 6f 6b 22 29 3b 0d 0a 20  lback hook");.. 
1c330 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1c340 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1c350 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  Error;....      
1c360 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66        result = f
1c370 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
1c380 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1c390 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1c3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1c400 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
1c410 72 61 63 65 20 43 61 6c 6c 62 61 63 6b 20 28 50  race Callback (P
1c420 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a  er-Connection)..
1c430 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1c440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c450 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c460 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 65      // NOTE: Whe
1c470 6e 20 75 73 69 6e 67 20 76 65 72 73 69 6f 6e 20  n using version 
1c480 33 2e 31 34 20 28 6f 72 20 6c 61 74 65 72 29 20  3.14 (or later) 
1c490 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  of the SQLite co
1c4a0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
1c4b0 2f 2f 20 20 20 20 20 20 20 6c 69 62 72 61 72 79  //       library
1c4c0 2c 20 75 73 65 20 74 68 65 20 6e 65 77 65 72 20  , use the newer 
1c4d0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32  sqlite3_trace_v2
1c4e0 28 29 20 41 50 49 20 69 6e 20 6f 72 64 65 72 0d  () API in order.
1c4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
1c500 20 20 20 20 20 20 74 6f 20 75 6e 68 6f 6f 6b 20        to unhook 
1c510 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
1c520 63 6b 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 65  ck, just in case
1c530 20 74 68 65 20 6f 6c 64 65 72 0d 0a 20 20 20 20   the older..    
1c540 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c550 20 41 50 49 20 69 73 20 6e 6f 74 20 61 76 61 69   API is not avai
1c560 6c 61 62 6c 65 20 28 65 2e 67 2e 20 53 51 4c 49  lable (e.g. SQLI
1c570 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
1c580 45 44 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ED)...          
1c590 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c5a0 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69    if (UnsafeNati
1c5b0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1c5c0 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  3_libversion_num
1c5d0 62 65 72 28 29 20 3e 3d 20 33 30 31 34 30 30 30  ber() >= 3014000
1c5e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c5f0 20 20 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62     SetTraceCallb
1c600 61 63 6b 32 28 53 51 4c 69 74 65 54 72 61 63 65  ack2(SQLiteTrace
1c610 46 6c 61 67 73 2e 53 51 4c 49 54 45 5f 54 52 41  Flags.SQLITE_TRA
1c620 43 45 5f 4e 4f 4e 45 2c 20 6e 75 6c 6c 29 3b 20  CE_NONE, null); 
1c630 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1c640 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1c660 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  etTraceCallback(
1c670 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20  null); /* throw 
1c680 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  */..        }..#
1c690 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1c6a0 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1c6b0 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1c6c0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1c6d0 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   e)..#else..    
1c6e0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1c6f0 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  tion)..#endif.. 
1c700 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
1c710 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1c720 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1c730 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  N..            t
1c740 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1c750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c760 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
1c770 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
1c780 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
1c7b0 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
1c7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c7d0 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20       "Failed to 
1c7e0 75 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c 6c  unset trace call
1c7f0 62 61 63 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  back: {0}",..   
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
1c820 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1c830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
1c840 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
1c850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c860 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1c870 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1c880 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
1c890 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45           AppendE
1c8a0 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66  rror(builder, "f
1c8b0 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 74  ailed to unset t
1c8c0 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 22 29 3b  race callback");
1c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
1c8e0 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
1c8f0 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20  de.Error;....   
1c900 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1c910 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1c920 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1c930 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1c940 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1c9a0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1c9b0 6e 20 43 6f 6d 6d 69 74 20 48 6f 6f 6b 20 28 50  n Commit Hook (P
1c9c0 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a  er-Connection)..
1c9d0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1c9e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c9f0 20 20 20 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f      SetCommitHoo
1ca00 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f  k(null); /* thro
1ca10 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  w */..        }.
1ca20 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1ca30 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1ca40 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1ca50 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1ca60 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  on e)..#else..  
1ca70 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1ca80 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d  eption)..#endif.
1ca90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1caa0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1cab0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1cac0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1cad0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1cae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1caf0 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
1cb00 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
1cb10 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1cb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb30 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
1cb40 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
1cb50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cb60 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74         "Failed t
1cb70 6f 20 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20 68  o unset commit h
1cb80 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ook: {0}",..    
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
1cbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1cbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1cbd0 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1cbe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1cbf0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1cc00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1cc10 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1cc20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72          AppendEr
1cc30 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61  ror(builder, "fa
1cc40 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 63 6f  iled to unset co
1cc50 6d 6d 69 74 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20  mmit hook");..  
1cc60 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1cc70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1cc80 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1cc90 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61       result = fa
1cca0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1ccb0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1ccc0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cd30 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 70        #region Up
1cd40 64 61 74 65 20 48 6f 6f 6b 20 28 50 65 72 2d 43  date Hook (Per-C
1cd50 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  onnection)..    
1cd60 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1cd70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cd80 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 6e 75  SetUpdateHook(nu
1cd90 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ll); /* throw */
1cda0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66  ..        }..#if
1cdb0 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1cdc0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1cdd0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61  TION..        ca
1cde0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1cdf0 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  )..#else..      
1ce00 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1ce10 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  on)..#endif..   
1ce20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
1ce30 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1ce40 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1ce50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
1ce60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ce70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce80 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1ce90 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
1cea0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1ced0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e     "Failed to un
1cf00 73 65 74 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  set update hook:
1cf10 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1cf30 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1cf40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1cf50 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cf80 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1cf90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1cfa0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1cfb0 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28      AppendError(
1cfc0 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64  builder, "failed
1cfd0 20 74 6f 20 75 6e 73 65 74 20 75 70 64 61 74 65   to unset update
1cfe0 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20   hook");..      
1cff0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74        rc = SQLit
1d000 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1d010 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d020 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
1d030 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d040 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1d050 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d0c0 20 20 23 72 65 67 69 6f 6e 20 41 75 74 68 6f 72    #region Author
1d0d0 69 7a 65 72 20 48 6f 6f 6b 20 28 50 65 72 2d 43  izer Hook (Per-C
1d0e0 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  onnection)..    
1d0f0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1d100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d110 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f  SetAuthorizerHoo
1d120 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f  k(null); /* thro
1d130 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  w */..        }.
1d140 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1d150 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1d160 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1d170 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1d180 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  on e)..#else..  
1d190 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1d1a0 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d  eption)..#endif.
1d1b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1d1c0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1d1d0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1d1e0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1d1f0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1d200 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d210 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
1d220 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
1d230 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1d240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d250 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
1d260 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
1d270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d280 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74         "Failed t
1d290 6f 20 75 6e 73 65 74 20 61 75 74 68 6f 72 69 7a  o unset authoriz
1d2a0 65 72 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a  er hook: {0}",..
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2c0 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f      e)); /* thro
1d2d0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
1d2e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d2f0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1d300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d310 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1d320 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1d330 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
1d340 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65              Appe
1d350 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c  ndError(builder,
1d360 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65   "failed to unse
1d370 74 20 61 75 74 68 6f 72 69 7a 65 72 20 68 6f 6f  t authorizer hoo
1d380 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
1d390 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
1d3a0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d  orCode.Error;...
1d3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
1d3c0 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
1d3d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d3e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1d3f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d450 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1d460 65 67 69 6f 6e 20 50 72 6f 67 72 65 73 73 20 48  egion Progress H
1d470 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74  ook (Per-Connect
1d480 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72  ion)..        tr
1d490 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
1d4a0 20 20 20 20 20 20 20 20 20 20 53 65 74 50 72 6f            SetPro
1d4b0 67 72 65 73 73 48 6f 6f 6b 28 30 2c 20 6e 75 6c  gressHook(0, nul
1d4c0 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  l); /* throw */.
1d4d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20  .        }..#if 
1d4e0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1d4f0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1d500 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74  ION..        cat
1d510 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1d520 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1d530 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1d540 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  n)..#endif..    
1d550 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
1d560 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1d570 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1d580 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1d590 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1d5c0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1d5d0 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
1d600 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73    "Failed to uns
1d630 65 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f 6b  et progress hook
1d640 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29               e))
1d660 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1d670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d680 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
1d690 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1d6d0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1d6e0 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72       AppendError
1d6f0 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65  (builder, "faile
1d700 64 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67 72  d to unset progr
1d710 65 73 73 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20  ess hook");..   
1d720 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1d730 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1d740 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ror;....        
1d750 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c      result = fal
1d760 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
1d770 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d780 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1d790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d7f0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67       #region Log
1d800 20 43 61 6c 6c 62 61 63 6b 20 28 47 6c 6f 62 61   Callback (Globa
1d810 6c 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  l)..        //..
1d820 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1d830 20 57 65 20 68 61 76 65 20 74 6f 20 62 65 20 63   We have to be c
1d840 61 72 65 66 75 6c 20 68 65 72 65 20 62 65 63 61  areful here beca
1d850 75 73 65 20 74 68 65 20 6c 6f 67 20 63 61 6c 6c  use the log call
1d860 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  back..        //
1d870 20 20 20 20 20 20 20 69 73 20 6e 6f 74 20 70 65         is not pe
1d880 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20  r-connection on 
1d890 74 68 65 20 6e 61 74 69 76 65 20 73 69 64 65 2e  the native side.
1d8a0 20 20 49 74 20 73 68 6f 75 6c 64 0d 0a 20 20 20    It should..   
1d8b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e       //       on
1d8c0 6c 79 20 62 65 20 75 6e 73 65 74 20 62 79 20 74  ly be unset by t
1d8d0 68 69 73 20 6d 65 74 68 6f 64 20 69 66 20 74 68  his method if th
1d8e0 69 73 20 69 6e 73 74 61 6e 63 65 20 77 61 73 0d  is instance was.
1d8f0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1d900 20 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f    responsible fo
1d910 72 20 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a 20  r setting it... 
1d920 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d930 20 20 20 69 66 20 28 69 6e 63 6c 75 64 65 47 6c     if (includeGl
1d940 6f 62 61 6c 20 26 26 20 5f 73 65 74 4c 6f 67 43  obal && _setLogC
1d950 61 6c 6c 62 61 63 6b 29 0d 0a 20 20 20 20 20 20  allback)..      
1d960 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d970 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1d980 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d990 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1d9a0 43 6f 64 65 20 72 63 32 20 3d 20 53 65 74 4c 6f  Code rc2 = SetLo
1d9b0 67 43 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b  gCallback(null);
1d9c0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 69 66 20 28 72 63 32 20 21 3d 20 53 51 4c 69 74  if (rc2 != SQLit
1d9f0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1da20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72         AppendErr
1da30 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 63 6f 75  or(builder, "cou
1da40 6c 64 20 6e 6f 74 20 75 6e 73 65 74 20 6c 6f 67  ld not unset log
1da50 20 63 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20 20   callback");..  
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 72 63 20 3d 20 72 63 32 3b 0d 0a 0d 0a 20    rc = rc2;.... 
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da90 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73     result = fals
1daa0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1dab0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dac0 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43     }..#if !NET_C
1dad0 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1dae0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1daf0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1db00 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1db10 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
1db20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1db30 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ion)..#endif..  
1db40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
1db50 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1db60 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1db70 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1db80 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1db90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1dbc0 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
1dbd0 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
1dc00 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
1dc10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69              "Fai
1dc30 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 6c 6f 67  led to unset log
1dc40 20 63 61 6c 6c 62 61 63 6b 3a 20 7b 30 7d 22 2c   callback: {0}",
1dc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc60 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
1dc70 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1dca0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
1dcb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1dcd0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1dcf0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
1dd00 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64            Append
1dd10 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22  Error(builder, "
1dd20 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  failed to unset 
1dd30 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 22 29 3b 0d  log callback");.
1dd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd50 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1dd60 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a  rCode.Error;....
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d  result = false;.
1dd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1dda0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ddb0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1ddc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1ddd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1de30 69 66 20 28 21 72 65 73 75 6c 74 20 26 26 20 63  if (!result && c
1de40 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20  anThrow)..      
1de50 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1de60 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1de70 72 63 2c 20 62 75 69 6c 64 65 72 2e 54 6f 53 74  rc, builder.ToSt
1de80 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  ring());....    
1de90 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
1dea0 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
1deb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ded0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df10 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1df20 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
1df30 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d  his method attem
1df40 70 74 73 20 74 6f 20 66 72 65 65 20 74 68 65 20  pts to free the 
1df50 63 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  cached database 
1df60 6e 61 6d 65 20 75 73 65 64 20 77 69 74 68 20 74  name used with t
1df70 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65  he..    /// <see
1df80 20 63 72 65 66 3d 22 53 65 74 43 6f 6e 66 69 67   cref="SetConfig
1df90 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 22 20 2f  urationOption" /
1dfa0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f  > method...    /
1dfb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1dfc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1dfd0 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22 3e 0d 0a  me="canThrow">..
1dfe0 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
1dff0 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
1e000 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
1e010 64 20 77 69 74 68 69 6e 20 61 20 63 6f 6e 74 65  d within a conte
1e020 78 74 20 77 68 65 72 65 20 69 74 20 63 61 6e 0d  xt where it can.
1e030 0a 20 20 20 20 2f 2f 2f 20 74 68 72 6f 77 20 61  .    /// throw a
1e040 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 74  n exception in t
1e050 68 65 20 65 76 65 6e 74 20 6f 66 20 66 61 69 6c  he event of fail
1e060 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ure; otherwise, 
1e070 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
1e080 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1e090 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1e0a0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
1e0b0 74 68 69 73 20 6d 65 74 68 6f 64 20 77 61 73 20  this method was 
1e0c0 73 75 63 63 65 73 73 66 75 6c 3b 20 6f 74 68 65  successful; othe
1e0d0 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
1e0e0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1e0f0 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
1e100 6f 6c 20 46 72 65 65 44 62 4e 61 6d 65 28 0d 0a  ol FreeDbName(..
1e110 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 61 6e          bool can
1e120 54 68 72 6f 77 0d 0a 20 20 20 20 20 20 20 20 29  Throw..        )
1e130 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1e140 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1e150 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e160 28 64 62 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74  (dbName != IntPt
1e170 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1e180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e190 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
1e1a0 6d 6f 72 79 2e 46 72 65 65 28 64 62 4e 61 6d 65  mory.Free(dbName
1e1b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1e1c0 20 20 20 20 64 62 4e 61 6d 65 20 3d 20 49 6e 74      dbName = Int
1e1d0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
1e1e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e1f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1e200 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1e210 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1e220 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1e230 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1e240 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1e250 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  on e)..#else..  
1e260 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1e270 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d  eption)..#endif.
1e280 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1e290 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1e2a0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1e2b0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1e2c0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1e2d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e2e0 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
1e2f0 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
1e300 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1e310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e320 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
1e330 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
1e340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e350 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74         "Failed t
1e360 6f 20 66 72 65 65 20 64 61 74 61 62 61 73 65 20  o free database 
1e370 6e 61 6d 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  name: {0}",..   
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
1e3a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1e3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
1e3c0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
1e3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e3e0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1e3f0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1e400 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
1e410 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6e           if (can
1e420 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20 20  Throw)..        
1e430 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a          throw;..
1e440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e450 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1e460 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
1e470 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4d0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1e4e0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
1e4f0 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c  reates a new SQL
1e500 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ite backup objec
1e510 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70  t based on the p
1e520 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74  rovided destinat
1e530 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
1e540 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1e550 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61  .  The source da
1e560 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1e570 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20  n is the one..  
1e580 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1e590 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
1e5a0 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61  t.  The source a
1e5b0 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  nd destination d
1e5c0 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
1e5d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e   connections can
1e5e0 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e  not be the same.
1e5f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1e600 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1e610 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43  aram name="destC
1e620 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  nn">The destinat
1e630 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ion database con
1e640 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
1e650 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1e660 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22   name="destName"
1e670 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
1e680 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
1e690 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1e6a0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
1e6b0 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f  urceName">The so
1e6c0 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61  urce database na
1e6d0 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
1e6e0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
1e6f0 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
1e700 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f  backup object.</
1e710 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1e720 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1e730 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69  SQLiteBackup Ini
1e740 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a  tializeBackup(..
1e750 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1e760 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e  nnection destCnn
1e770 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
1e780 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20  g destName,..   
1e790 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72       string sour
1e7a0 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  ceName..        
1e7b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1e7c0 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d    if (destCnn ==
1e7d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e7e0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1e7f0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1e800 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d  ion("destCnn");.
1e810 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
1e820 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  estName == null)
1e830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1e840 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1e850 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
1e860 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  estName");....  
1e870 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
1e880 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
1e890 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1e8a0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
1e8b0 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72  lException("sour
1e8c0 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  ceName");....   
1e8d0 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73       SQLite3 des
1e8e0 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43  tSqlite3 = destC
1e8f0 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74  nn._sql as SQLit
1e900 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e3;....        i
1e910 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d  f (destSqlite3 =
1e920 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1e930 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1e940 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
1e950 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e960 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
1e970 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e  connection has n
1e980 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20  o wrapper.",..  
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
1e9a0 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
1e9b0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1e9c0 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74  ctionHandle dest
1e9d0 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c  Handle = destSql
1e9e0 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  ite3._sql;....  
1e9f0 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48 61        if (destHa
1ea00 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
1ea10 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1ea20 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
1ea30 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1ea40 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
1ea50 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
1ea60 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1ea70 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20  handle.",..     
1ea80 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74             "dest
1ea90 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
1eaa0 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
1eab0 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48  onHandle sourceH
1eac0 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d  andle = _sql;...
1ead0 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
1eae0 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  rceHandle == nul
1eaf0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1eb00 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1eb10 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1eb20 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1eb30 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f        "Source co
1eb40 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
1eb50 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
1eb60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79  );....        by
1eb70 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d  te[] zDestName =
1eb80 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65   ToUTF8(destName
1eb90 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  );..        byte
1eba0 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d  [] zSourceName =
1ebb0 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61   ToUTF8(sourceNa
1ebc0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1ebd0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
1ebe0 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20  le backupHandle 
1ebf0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
1ec00 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1ec10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
1ec20 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1ec30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ec40 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
1ec50 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
1ec60 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
1ec70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1ec80 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1ec90 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e  backup = UnsafeN
1eca0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1ecb0 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
1ecc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ecd0 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a     destHandle, z
1ece0 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
1ecf0 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e  Handle, zSourceN
1ed00 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1ed10 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
1ed20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1ed60 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73  resultCode = Res
1ed70 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ultCode();....  
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ed90 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20   (resultCode != 
1eda0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1edb0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
1edc0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1edd0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
1ede0 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47  on(resultCode, G
1edf0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
1ee00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee10 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1ee20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1ee30 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1ee40 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20  tion("failed to 
1ee50 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75  initialize backu
1ee60 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  p");..          
1ee70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ee80 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20     backupHandle 
1ee90 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  = new SQLiteBack
1eea0 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e  upHandle(destHan
1eeb0 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20  dle, backup);.. 
1eec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1eed0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1eee0 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
1eef0 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
1ef00 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
1ef10 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1ef20 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
1ef30 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c  Type.NewCritical
1ef40 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20  Handle, null,.. 
1ef50 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
1ef60 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63   null, null, bac
1ef70 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  kupHandle, null,
1ef80 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
1ef90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
1efa0 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 64 65  eof(SQLite3), de
1efb0 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d 65 2c  stCnn, destName,
1efc0 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29 3b   sourceName }));
1efd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
1efe0 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63  rn new SQLiteBac
1eff0 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kup(..          
1f000 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61    this, backupHa
1f010 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65  ndle, destHandle
1f020 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75  , zDestName, sou
1f030 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20  rceHandle,..    
1f040 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e          zSourceN
1f050 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
1f060 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1f070 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65  >..    /// Copie
1f080 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20  s up to N pages 
1f090 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20  from the source 
1f0a0 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
1f0b0 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
1f0c0 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73   /// database as
1f0d0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1f0e0 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
1f0f0 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
1f100 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1f110 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1f120 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
1f130 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
1f140 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
1f150 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1f160 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20  ame="nPage">..  
1f170 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
1f180 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70   of pages to cop
1f190 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63  y, negative to c
1f1a0 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e  opy all remainin
1f1b0 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f  g pages...    //
1f1c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1f1d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1f1e0 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f  "retry">..    //
1f1f0 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66  / Set to true if
1f200 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e   the operation n
1f210 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69  eeds to be retri
1f220 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61  ed due to databa
1f230 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b  se..    /// lock
1f240 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65  ing issues; othe
1f250 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61  rwise, set to fa
1f260 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lse...    /// </
1f270 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1f280 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
1f290 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65  // True if there
1f2a0 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20   are more pages 
1f2b0 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61  to be copied, fa
1f2c0 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  lse otherwise...
1f2d0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1f2e0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1f2f0 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
1f300 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  tepBackup(..    
1f310 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
1f320 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20   backup,..      
1f330 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20    int nPage,..  
1f340 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72        ref bool r
1f350 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  etry..        ).
1f360 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1f370 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  retry = false;..
1f380 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
1f390 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
1f3a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1f3b0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
1f3c0 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
1f3d0 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
1f3e0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
1f3f0 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
1f400 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
1f410 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
1f420 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
1f430 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f440 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1f450 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1f460 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1f470 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
1f480 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
1f490 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
1f4a0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
1f4b0 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
1f4c0 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
1f4d0 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
1f4e0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
1f4f0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1f500 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1f510 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1f520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f530 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1f540 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1f550 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
1f560 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1f570 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
1f580 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1f590 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
1f5a0 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50  kup_step(handleP
1f5b0 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20  tr, nPage);..   
1f5c0 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65       backup._ste
1f5d0 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20  pResult = n; /* 
1f5e0 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75  NOTE: Save for u
1f5f0 73 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b  se by FinishBack
1f600 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  up. */....      
1f610 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
1f620 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1f630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1f650 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1f660 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1f670 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
1f680 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
1f690 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f6a0 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
1f6b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
1f6c0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1f6d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f6e0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
1f6f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
1f700 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  cked)..        {
1f710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f720 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  try = true;..   
1f730 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f740 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1f750 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
1f760 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
1f770 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20  rorCode.Done).. 
1f780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f790 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1f7a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
1f7b0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1f7c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f7d0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
1f7e0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
1f7f0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
1f800 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
1f810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1f820 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1f830 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
1f840 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
1f850 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
1f860 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73  opied from the s
1f870 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64  ource..    /// d
1f880 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
1f890 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
1f8a0 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
1f8b0 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
1f8c0 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75  d..    /// backu
1f8d0 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
1f8e0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1f8f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1f900 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
1f910 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
1f920 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
1f930 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1f940 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
1f950 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
1f960 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72  to be copied.</r
1f970 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1f980 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
1f990 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b  nt RemainingBack
1f9a0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
1f9b0 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
1f9c0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1f9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
1f9e0 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
1f9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1fa00 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
1fa10 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
1fa20 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
1fa30 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
1fa40 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
1fa50 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
1fa60 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
1fa70 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
1fa80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1fa90 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1faa0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1fab0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1fac0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
1fad0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
1fae0 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
1faf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
1fb00 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
1fb10 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
1fb20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
1fb30 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1fb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1fb50 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1fb60 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1fb70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1fb80 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
1fb90 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
1fba0 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
1fbb0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ");....        r
1fbc0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1fbd0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1fbe0 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69  3_backup_remaini
1fbf0 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  ng(handlePtr);..
1fc00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1fc10 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1fc20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
1fc30 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1fc40 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75  pages in the sou
1fc50 72 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73  rce database ass
1fc60 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
1fc70 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
1fc80 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
1fc90 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
1fca0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1fcb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
1fcc0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
1fcd0 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
1fce0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1fcf0 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74  / <returns>The t
1fd00 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
1fd10 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
1fd20 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65  ce database.</re
1fd30 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1fd40 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
1fd50 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75  t PageCountBacku
1fd60 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
1fd70 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
1fd80 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1fd90 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
1fda0 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1fdc0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1fdd0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
1fde0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
1fdf0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
1fe00 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
1fe10 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
1fe20 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
1fe30 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
1fe40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1fe50 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1fe60 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1fe70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1fe80 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
1fe90 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
1fea0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
1feb0 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
1fec0 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
1fed0 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
1fee0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
1fef0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1ff10 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1ff20 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff40 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1ff50 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1ff60 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
1ff70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
1ff80 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
1ff90 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1ffa0 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e  _backup_pagecoun
1ffb0 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  t(handlePtr);.. 
1ffc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1ffd0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1ffe0 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20  // Destroys the 
1fff0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72  backup object, r
20000 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20  olling back any 
20010 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20  backup that may 
20020 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70  be in..    /// p
20030 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rogess...    ///
20040 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
20050 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
20060 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
20070 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64  ckup object to d
20080 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d  estroy.</param>.
20090 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
200a0 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69  erride void Fini
200b0 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  shBackup(..     
200c0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
200d0 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
200e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
200f0 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
20100 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20110 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
20120 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
20130 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
20140 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
20150 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
20160 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
20170 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
20180 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
20190 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
201a0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
201b0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
201c0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
201e0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
201f0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
20200 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
20210 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
20220 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
20230 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
20240 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
20250 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
20260 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
20270 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
20280 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
20290 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
202a0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
202b0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
202c0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66  inter.");....#if
202d0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
202e0 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
202f0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
20300 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
20310 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
20320 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70  p_finish_interop
20330 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65  (handlePtr);..#e
20340 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  lse..        SQL
20350 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
20360 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
20370 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
20380 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c  kup_finish(handl
20390 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ePtr);..#endif..
203a0 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53          handle.S
203b0 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69  etHandleAsInvali
203c0 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e  d();....#if COUN
203d0 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20  T_HANDLE..      
203e0 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
203f0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
20400 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e  || (n == backup.
20410 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20 68 61  _stepResult)) ha
20420 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65 64  ndle.WasReleased
20430 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  Ok();..#endif...
20440 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20  .        if ((n 
20450 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
20460 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20  de.Ok) && (n != 
20470 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
20480 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lt))..          
20490 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
204a0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
204b0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
204c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20530 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
20540 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65  y>..    /// Dete
20550 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51  rmines if the SQ
20560 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
20570 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69  y has been initi
20580 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a  alized for the..
20590 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
205a0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
205b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
205c0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
205d0 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65  .    /// A boole
205e0 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  an indicating wh
205f0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
20600 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
20610 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20  rary has been.. 
20620 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a     /// initializ
20630 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ed for the curre
20640 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
20650 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
20660 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
20670 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e  erride bool IsIn
20680 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
20690 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
206a0 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69  rn StaticIsIniti
206b0 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d  alized();..    }
206c0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
20730 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20740 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
20750 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
20760 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
20770 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
20780 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
20790 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
207a0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
207b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
207c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
207d0 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
207e0 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
207f0 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
20800 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
20810 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
20820 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
20830 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
20840 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
20850 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
20860 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
20870 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74  ool StaticIsInit
20880 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
20890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
208a0 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
208b0 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77   Prevent races w
208c0 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64  ith other thread
208d0 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72  s for this entir
208e0 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20  e block, due..  
208f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
20900 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61   to the try/fina
20910 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20  lly semantics.  
20920 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30  See ticket [7290
20930 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20  5c9a77]...      
20940 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f    //..        lo
20950 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
20960 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20970 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20980 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
20990 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66  ave the state of
209a0 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61   the logging cla
209b0 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74  ss and then rest
209c0 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ore it..        
209d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74      //       aft
209e0 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74  er we are done t
209f0 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20  o avoid logging 
20a00 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65  too many false e
20a10 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  rrors...        
20a20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
20a30 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e      bool savedEn
20a40 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f  abled = SQLiteLo
20a50 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  g.Enabled;..    
20a60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
20a70 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73  g.Enabled = fals
20a80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
20a90 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
20aa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20ab0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20ac0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
20ad0 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b  E: This method [
20ae0 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74  ab]uses the fact
20af0 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
20b00 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  l always..      
20b10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
20b20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
20b30 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75  _ERROR for any u
20b40 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61  nknown configura
20b50 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  tion option..   
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
20b70 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74        *unless* t
20b80 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
20b90 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
20ba0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d  en initialized..
20bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20bc0 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61   //       In tha
20bd0 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61  t case it will a
20be0 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c  lways return SQL
20bf0 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20  ITE_MISUSE...   
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
20c30 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
20c40 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
20c50 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a  3_config_none(..
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
20c80 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
20c90 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a  ONFIG_NONE);....
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51  return (rc == SQ
20cc0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69  LiteErrorCode.Mi
20cd0 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  suse);..        
20ce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20cf0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
20d00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20d10 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
20d20 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73  eLog.Enabled = s
20d30 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  avedEnabled;..  
20d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20d50 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
20d60 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20dc0 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 55 53 45 5f  ////....#if USE_
20dd0 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 26 26 20 49  INTEROP_DLL && I
20de0 4e 54 45 52 4f 50 5f 4c 4f 47 0d 0a 20 20 20 20  NTEROP_LOG..    
20df0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
20e00 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
20e10 43 6f 6e 66 69 67 75 72 65 4c 6f 67 46 6f 72 49  ConfigureLogForI
20e20 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20 20 20 20  nterop(..       
20e30 20 73 74 72 69 6e 67 20 63 6c 61 73 73 4e 61 6d   string classNam
20e40 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
20e50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
20e60 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
20e70 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
20e80 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
20e90 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70  nfig_log_interop
20ea0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
20eb0 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
20ec0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
20ed0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20ee0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
20ef0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
20f00 5f 6c 6f 67 28 72 63 2c 20 53 51 4c 69 74 65 43  _log(rc, SQLiteC
20f10 6f 6e 76 65 72 74 2e 54 6f 55 54 46 38 28 0d 0a  onvert.ToUTF8(..
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f30 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
20f40 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75  ringFormat(Cultu
20f50 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
20f60 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c                "l
20f80 6f 67 67 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  ogging initializ
20f90 65 64 20 76 69 61 20 5c 22 7b 30 7d 5c 22 2e 22  ed via \"{0}\"."
20fa0 2c 20 63 6c 61 73 73 4e 61 6d 65 29 29 29 3b 0d  , className)));.
20fb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
20fc0 20 20 20 20 65 6c 73 65 20 69 66 20 28 72 63 20      else if (rc 
20fd0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
20fe0 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20  de.Done)..      
20ff0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21000 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
21010 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
21020 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21030 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
21040 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
21050 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
210c0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48  mary>..    /// H
210d0 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74  elper function t
210e0 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c  o retrieve a col
210f0 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d  umn of data from
21100 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65   an active state
21110 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ment...    /// <
21120 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
21130 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21140 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d  stmt">The statem
21150 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29  ent being step()
21160 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61  'd through</para
21170 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
21180 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
21190 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
211a0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f  ated with the co
211b0 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  nnection.</param
211c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
211d0 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54  m name="index">T
211e0 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  he column index 
211f0 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
21200 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
21210 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
21220 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20  he type of data 
21230 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
21240 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69   column.  If Uni
21250 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73  nitialized, this
21260 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
21270 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61  etrieve the data
21280 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  type information
21290 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
212a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
212b0 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20  rns the data in 
212c0 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
212d0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
212e0 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  al override obje
212f0 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69  ct GetValue(SQLi
21300 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
21310 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
21320 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
21330 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65  nt index, SQLite
21340 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
21350 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
21360 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41  nity aff = typ.A
21370 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
21380 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41  if (aff == TypeA
21390 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65  ffinity.Null) re
213a0 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  turn DBNull.Valu
213b0 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74  e;..      Type t
213c0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
213d0 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21    if (typ.Type !
213e0 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29  = DbType.Object)
213f0 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
21400 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e     t = SQLiteCon
21410 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
21420 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20  oType(typ);..   
21430 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54       aff = TypeT
21440 6f 41 66 66 69 6e 69 74 79 28 74 2c 20 66 6c 61  oAffinity(t, fla
21450 67 73 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  gs);..      }...
21460 0a 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65  .      if (Helpe
21470 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
21480 73 28 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43  s(flags, SQLiteC
21490 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
214a0 65 74 41 6c 6c 41 73 54 65 78 74 29 29 0d 0a 20  etAllAsText)).. 
214b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
214c0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
214d0 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  dex);....      s
214e0 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20  witch (aff)..   
214f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
21500 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
21510 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
21520 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
21530 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
21540 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
21550 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
21560 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
21570 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
21580 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
21590 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex));....      
215a0 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74      int n = (int
215b0 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20  )GetBytes(stmt, 
215c0 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20  index, 0, null, 
215d0 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20  0, 0);..        
215e0 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77    byte[] b = new
215f0 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20   byte[n];..     
21600 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
21610 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c  mt, index, 0, b,
21620 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   0, n);....     
21630 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
21640 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
21650 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20   && n == 16)..  
21660 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21670 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d   new Guid(b);...
21680 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
21690 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  n b;..        ca
216a0 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
216b0 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20  DateTime:..     
216c0 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44       return GetD
216d0 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e  ateTime(stmt, in
216e0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  dex);..        c
216f0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
21700 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
21710 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
21720 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75  l) return GetDou
21730 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
21740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
21750 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
21760 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65  geType(GetDouble
21770 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
21780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21790 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48   HelperMethods.H
217a0 61 73 46 6c 61 67 73 28 66 6c 61 67 73 2c 20 53  asFlags(flags, S
217b0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
217c0 6c 61 67 73 2e 47 65 74 49 6e 76 61 72 69 61 6e  lags.GetInvarian
217d0 74 44 6f 75 62 6c 65 29 20 3f 0d 0a 20 20 20 20  tDouble) ?..    
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
217f0 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
21800 61 6e 74 43 75 6c 74 75 72 65 20 3a 20 43 75 6c  antCulture : Cul
21810 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
21820 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
21830 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
21840 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
21850 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
21860 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
21870 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
21880 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
21890 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42  f (t == typeof(B
218a0 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75 72 6e 20  oolean)) return 
218b0 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d 74 2c  GetBoolean(stmt,
218c0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
218d0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
218e0 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74 75  eof(SByte)) retu
218f0 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d 74  rn GetSByte(stmt
21900 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21910 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
21920 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74 75  peof(Byte)) retu
21930 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c  rn GetByte(stmt,
21940 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
21950 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
21960 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74 75  eof(Int16)) retu
21970 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74  rn GetInt16(stmt
21980 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21990 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
219a0 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65  peof(UInt16)) re
219b0 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73  turn GetUInt16(s
219c0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
219d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
219e0 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20   typeof(Int32)) 
219f0 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28  return GetInt32(
21a00 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
21a10 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
21a20 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29  = typeof(UInt32)
21a30 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74  ) return GetUInt
21a40 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  32(stmt, index);
21a50 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
21a60 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 36  t == typeof(Int6
21a70 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  4)) return GetIn
21a80 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
21a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
21aa0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
21ab0 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
21ac0 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  UInt64(stmt, ind
21ad0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
21ae0 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
21af0 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74  hangeType(GetInt
21b00 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  64(stmt, index),
21b10 20 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   t,..           
21b20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
21b30 2e 48 61 73 46 6c 61 67 73 28 66 6c 61 67 73 2c  .HasFlags(flags,
21b40 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
21b50 6e 46 6c 61 67 73 2e 47 65 74 49 6e 76 61 72 69  nFlags.GetInvari
21b60 61 6e 74 49 6e 74 36 34 29 20 3f 0d 0a 20 20 20  antInt64) ?..   
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
21b80 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
21b90 69 61 6e 74 43 75 6c 74 75 72 65 20 3a 20 43 75  iantCulture : Cu
21ba0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
21bb0 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
21bc0 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
21bd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
21be0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
21bf0 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ex);..      }.. 
21c00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
21c10 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
21c20 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61  t GetCursorForTa
21c30 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
21c40 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62  ent stmt, int db
21c50 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d  , int rootPage).
21c60 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
21c70 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
21c80 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
21c90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
21ca0 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72  qlite3_table_cur
21cb0 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  sor_interop(stmt
21cc0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64  ._sqlite_stmt, d
21cd0 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23  b, rootPage);..#
21ce0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
21cf0 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a  rn -1;..#endif..
21d00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
21d10 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
21d20 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43  ong GetRowIdForC
21d30 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74  ursor(SQLiteStat
21d40 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
21d50 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a  cursor)..    {..
21d60 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
21d70 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
21d80 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20 20   rowid = 0;..   
21d90 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
21da0 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
21db0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
21dc0 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64  te3_cursor_rowid
21dd0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
21de0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73  qlite_stmt, curs
21df0 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b 0d  or, ref rowid);.
21e00 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d  .      if (rc ==
21e10 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21e20 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69  .Ok) return rowi
21e30 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  d;....      retu
21e40 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  rn 0;..#else..  
21e50 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
21e60 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
21e70 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
21e80 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e  rride void GetIn
21e90 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65  dexColumnExtende
21ea0 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74  dInfo(string dat
21eb0 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e  abase, string in
21ec0 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  dex, string colu
21ed0 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72 74  mn, ref int sort
21ee0 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f 6e  Mode, ref int on
21ef0 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69 6e  Error, ref strin
21f00 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  g collationSeque
21f10 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  nce)..    {..#if
21f20 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
21f30 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  D..      IntPtr 
21f40 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  coll = IntPtr.Ze
21f50 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63  ro;..      int c
21f60 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  olllen = 0;..   
21f70 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
21f80 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  de rc;....      
21f90 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
21fa0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
21fb0 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
21fc0 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
21fd0 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
21fe0 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
21ff0 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
22000 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c 20  , ref sortMode, 
22010 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66  ref onError, ref
22020 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c   coll, ref colll
22030 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
22040 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
22050 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
22060 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
22070 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(rc, null);..
22080 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
22090 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
220a0 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
220b0 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
220c0 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
220d0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
220e0 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
220f0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
22100 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
22110 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
22120 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
22130 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
22140 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f  rCode FileContro
22150 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
22160 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
22170 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
22180 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
22190 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
221a0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
221b0 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
221c0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
221d0 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
221e0 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
221f0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
22200 0d 0a                                            ..