System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ca2b7e9c9b56b76a8380ffacb27359f2ea101c1e:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0250: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a  m.Threading;....
0260: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0270: 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74  .  /// This is t
0280: 68 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74  he method signat
0290: 75 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ure for the SQLi
02a0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
02b0: 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
02c0: 0d 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e  ..  /// function
02d0: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71   for use with sq
02e0: 6c 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20  lite3_log() and 
02f0: 74 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  the SQLITE_CONFI
0300: 47 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20  G_LOG...  ///.. 
0310: 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68   /// WARNING: Th
0320: 69 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75  is delegate is u
0330: 73 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73  sed more-or-less
0340: 20 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74   directly by nat
0350: 69 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20  ive code, do..  
0360: 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74  ///          not
0370: 20 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65   modify its type
0380: 20 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f   signature...  /
0390: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
03a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
03b0: 3d 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20  ="pUserData">.. 
03c0: 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64   /// The extra d
03d0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
03e0: 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65  ith this message
03f0: 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f  , if any...  ///
0400: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f   </param>..  ///
0410: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
0420: 72 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f  rorCode">..  ///
0430: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
0440: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0450: 74 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20  this message... 
0460: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0470: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0480: 3d 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20  ="pMessage">..  
0490: 2f 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20  /// The message 
04a0: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67  string to be log
04b0: 67 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ged...  /// </pa
04c0: 72 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46  ram>..#if !PLATF
04d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
04e0: 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67  WORK..  [Unmanag
04f0: 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65  edFunctionPointe
0500: 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74  r(CallingConvent
0510: 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e  ion.Cdecl)]..#en
0520: 64 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20  dif..  internal 
0530: 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51  delegate void SQ
0540: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28  LiteLogCallback(
0550: 49 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61  IntPtr pUserData
0560: 2c 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c  , int errorCode,
0570: 20 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65   IntPtr pMessage
0580: 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  );....  /// <sum
0590: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
05a0: 73 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e  s class implemen
05b0: 74 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f  ts SQLiteBase co
05c0: 6d 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73  mpletely, and is
05d0: 20 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65   the guts of the
05e0: 20 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72   code that inter
05f0: 6f 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68  op's SQLite with
0600: 20 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73   .NET..  /// </s
0610: 75 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72  ummary>..  inter
0620: 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65  nal class SQLite
0630: 33 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a  3 : SQLiteBase..
0640: 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65    {..    private
0650: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73   static object s
0660: 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
0670: 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f  ject();....    /
0680: 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  /..    // NOTE: 
0690: 54 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c  This is the publ
06a0: 69 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53  ic key for the S
06b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
06c0: 65 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20  e assembly.  If 
06d0: 79 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a  you change the..
06e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b      //       SNK
06f0: 20 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20   file, you will 
0700: 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74  need to change t
0710: 68 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  his as well...  
0720: 20 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e    //..    intern
0730: 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  al const string 
0740: 50 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20  PublicKey =..   
0750: 20 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34       "0024000004
0760: 38 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36  8000009400000006
0770: 30 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32  0200000024000052
0780: 35 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31  5341310004000001
0790: 30 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36  00010005a288de56
07a0: 38 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20  87c4e1" +..     
07b0: 20 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34     "b621ddff5d84
07c0: 34 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37  4727418956997f47
07d0: 35 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66  5eb829429e411aff
07e0: 33 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62  3e93f97b70de698b
07f0: 39 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38  972640925bdd4428
0800: 30 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20  0df0" +..       
0810: 20 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37   "a25a8432669737
0820: 30 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31  04137cbb0e7441c1
0830: 66 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31  fe7cae4e2440ae91
0840: 61 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31  ab8cde3933febcb1
0850: 61 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34  ac48dd33b40e13c4
0860: 32 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22  21" +..        "
0870: 64 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33  d8215c18a4349a43
0880: 36 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38  6dd499e3c385cc68
0890: 33 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39  3015f886f6c10bd9
08a0: 30 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35  0115eb2bd61b6775
08b0: 30 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63  0839e3a19941dc9c
08c0: 22 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  ";....#if !PLATF
08d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
08e0: 57 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  WORK..    intern
08f0: 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  al const string 
0900: 44 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20  DesignerVersion 
0910: 3d 20 22 31 2e 30 2e 39 38 2e 30 22 3b 0d 0a 23  = "1.0.98.0";..#
0920: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
0930: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0940: 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70  /// The opaque p
0950: 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20  ointer returned 
0960: 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c  to us by the sql
0970: 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20  ite provider..  
0980: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0990: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
09a0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
09b0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
09c0: 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65  _sql;..    prote
09d0: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c  cted string _fil
09e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74  eName;..    prot
09f0: 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50  ected bool _useP
0a00: 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  ool;..    protec
0a10: 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72  ted int _poolVer
0a20: 73 69 6f 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61  sion;..    priva
0a30: 74 65 20 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f  te int _cancelCo
0a40: 75 6e 74 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54  unt;....#if (NET
0a50: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
0a60: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
0a70: 35 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  51) && !PLATFORM
0a80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0a90: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0aa0: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0ab0: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0ac0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0ad0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0ae0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0af0: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0b00: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0b10: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0b20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0b30: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0b40: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0b50: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0b60: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0b70: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0b80: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0b90: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0ba0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0bb0: 54 68 65 20 6d 6f 64 75 6c 65 73 20 63 72 65 61  The modules crea
0bc0: 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 63  ted using this c
0bd0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0be0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0bf0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 44 69      protected Di
0c00: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
0c10: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f   SQLiteModule> _
0c20: 6d 6f 64 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66  modules;..#endif
0c30: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
0ca0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0cb0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
0cc0: 20 74 68 65 20 6f 62 6a 65 63 74 20 75 73 65 64   the object used
0cd0: 20 74 6f 20 69 6e 74 65 72 61 63 74 20 77 69 74   to interact wit
0ce0: 68 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  h the SQLite cor
0cf0: 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 2f  e library..    /
0d00: 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 55 54 46  // using the UTF
0d10: 2d 38 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  -8 text encoding
0d20: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0d30: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
0d40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22  param name="fmt"
0d50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44  >..    /// The D
0d60: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 74  ateTime format t
0d70: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
0d80: 6f 6e 76 65 72 74 69 6e 67 20 73 74 72 69 6e 67  onverting string
0d90: 20 76 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20   values to a..  
0da0: 20 20 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20 61    /// DateTime a
0db0: 6e 64 20 62 69 6e 64 69 6e 67 20 44 61 74 65 54  nd binding DateT
0dc0: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d  ime parameters..
0dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
0de0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0df0: 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a  m name="kind">..
0e00: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
0e10: 20 63 72 65 66 3d 22 44 61 74 65 54 69 6d 65 4b   cref="DateTimeK
0e20: 69 6e 64 22 20 2f 3e 20 74 6f 20 62 65 20 75 73  ind" /> to be us
0e30: 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67  ed when creating
0e40: 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f   DateTime..    /
0e50: 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  // values...    
0e60: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0e70: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0e80: 65 3d 22 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a  e="fmtString">..
0e90: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d      /// The form
0ea0: 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20  at string to be 
0eb0: 75 73 65 64 20 77 68 65 6e 20 70 61 72 73 69 6e  used when parsin
0ec0: 67 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67  g and formatting
0ed0: 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f   DateTime..    /
0ee0: 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  // values...    
0ef0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0f00: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0f10: 65 3d 22 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f  e="db">..    ///
0f20: 20 54 68 65 20 6e 61 74 69 76 65 20 68 61 6e 64   The native hand
0f30: 6c 65 20 74 6f 20 62 65 20 61 73 73 6f 63 69 61  le to be associa
0f40: 74 65 64 20 77 69 74 68 20 74 68 65 20 64 61 74  ted with the dat
0f50: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
0f60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
0f70: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0f80: 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
0f90: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
0fa0: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
0fb0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f  d file name asso
0fc0: 63 69 61 74 65 64 20 77 69 74 68 20 3c 70 61 72  ciated with <par
0fd0: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 20 22  amref name="db "
0fe0: 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  />...    /// </p
0ff0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1000: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48  param name="ownH
1010: 61 6e 64 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  andle">..    ///
1020: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
1030: 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 6f   newly created o
1040: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 77  bject instance w
1050: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 69 73 70  ill need to disp
1060: 6f 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20  ose..    /// of 
1070: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
1080: 64 62 22 20 2f 3e 20 77 68 65 6e 20 69 74 20 69  db" /> when it i
1090: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64  s no longer need
10a0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
10b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
10c0: 6e 61 6c 20 53 51 4c 69 74 65 33 28 0d 0a 20 20  nal SQLite3(..  
10d0: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 65        SQLiteDate
10e0: 46 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20  Formats fmt,..  
10f0: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69        DateTimeKi
1100: 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  nd kind,..      
1110: 20 20 73 74 72 69 6e 67 20 66 6d 74 53 74 72 69    string fmtStri
1120: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ng,..        Int
1130: 50 74 72 20 64 62 2c 0d 0a 20 20 20 20 20 20 20  Ptr db,..       
1140: 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
1150: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
1160: 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20  ownHandle..     
1170: 20 20 20 29 0d 0a 20 20 20 20 20 20 3a 20 62 61     )..      : ba
1180: 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d  se(fmt, kind, fm
1190: 74 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  tString)..    {.
11a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 62 20  .        if (db 
11b0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
11c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11d0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
11e0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
11f0: 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77  ionHandle(db, ow
1200: 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20  nHandle);..     
1210: 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65         _fileName
1220: 20 3d 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a   = fileName;....
1230: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1240: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
1250: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
1260: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
1270: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
1280: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
1290: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
12a0: 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64  .NewCriticalHand
12b0: 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  le, null,..     
12c0: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
12d0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71   null, null, _sq
12e0: 6c 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77  l, fileName, new
12f0: 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1310: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 66 6d  eof(SQLite3), fm
1320: 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69  t, kind, fmtStri
1330: 6e 67 2c 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65  ng, db, fileName
1340: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1350: 20 20 20 6f 77 6e 48 61 6e 64 6c 65 20 7d 29 29     ownHandle }))
1360: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1370: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13e0: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
13f0: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
1400: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69  Members..    pri
1410: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
1420: 65 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ed;..    private
1430: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
1440: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
1450: 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48  /..    {..#if TH
1460: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
1470: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73  .        if (dis
1480: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1490: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
14a0: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
14b0: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
14c0: 69 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65  ite3).Name);..#e
14d0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
14e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63  //....    protec
1550: 74 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69  ted override voi
1560: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
1570: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b  isposing)..    {
1580: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
1590: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15a0: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
15b0: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
15c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15d0: 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f       //if (dispo
15e0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
15f0: 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
1600: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1640: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1650: 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64   dispose managed
1660: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
1670: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1680: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c0: 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  //}....         
16d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1710: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
1720: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
1730: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
1740: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1770: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
1780: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
1790: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
17a0: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23  oseModules();..#
17b0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
17c0: 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28 66           Close(f
17d0: 61 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73  alse); /* Dispos
17e0: 69 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f  ing, cannot thro
17f0: 77 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  w. */..         
1800: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1810: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
1820: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1830: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 44 69           base.Di
1840: 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29  spose(disposing)
1850: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1860: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1870: 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74   // NOTE: Everyt
1880: 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66  hing should be f
1890: 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74  ully disposed at
18a0: 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20   this point...  
18b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
18d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
18e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
18f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1900: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ///....#if INTER
1970: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
1980: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1990: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
19a0: 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74  s method attempt
19b0: 73 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  s to dispose of 
19c0: 61 6c 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65  all the <see cre
19d0: 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22  f="SQLiteModule"
19e0: 20 2f 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20   /> derived..   
19f0: 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74   /// object inst
1a00: 61 6e 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20  ances currently 
1a10: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1a20: 74 68 65 20 6e 61 74 69 76 65 20 64 61 74 61 62  the native datab
1a30: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ase connection..
1a40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1a50: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
1a60: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64   void DisposeMod
1a70: 75 6c 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ules()..    {.. 
1a80: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a90: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61     // NOTE: If a
1aa0: 6e 79 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20  ny modules were 
1ab0: 63 72 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74  created, attempt
1ac0: 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a   to dispose of..
1ad0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ae0: 20 74 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73   them now.  This
1af0: 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65   code is designe
1b00: 64 20 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77  d to avoid throw
1b10: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ing..        // 
1b20: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73        exceptions
1b30: 20 75 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70   unless the Disp
1b40: 6f 73 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  ose method of th
1b50: 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20  e module..      
1b60: 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c    //       itsel
1b70: 66 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65  f throws an exce
1b80: 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ption...        
1b90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  //..        if (
1ba0: 5f 6d 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c  _modules != null
1bb0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1bc0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
1bd0: 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c  h (KeyValuePair<
1be0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
1bf0: 64 75 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d  dule> pair in _m
1c00: 6f 64 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20  odules)..       
1c10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
1c30: 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61  dule module = pa
1c40: 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ir.Value;....   
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c60: 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
1c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c80: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1c90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ca0: 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73     module.Dispos
1cb0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
1cc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cd0: 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61     _modules.Clea
1ce0: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  r();..        }.
1cf0: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
1d00: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20  /////....    // 
1d70: 49 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61  It isn't necessa
1d80: 72 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e  ry to cleanup an
1d90: 79 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76  y functions we'v
1da0: 65 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49  e registered.  I
1db0: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
1dc0: 0d 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f  ..    // goes to
1dd0: 20 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73   the pool and is
1de0: 20 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74   resurrected lat
1df0: 65 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65  er, re-registere
1e00: 64 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  d functions will
1e10: 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a   overwrite the..
1e20: 20 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20      // previous 
1e30: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
1e40: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f  SQLiteFunctionCo
1e50: 6f 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20  okieHandle will 
1e60: 74 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65  take care of fre
1e70: 65 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a  eing unmanaged..
1e80: 20 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73      // resources
1e90: 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68   belonging to th
1ea0: 65 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67  e previously-reg
1eb0: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
1ec0: 73 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s...    internal
1ed0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1ee0: 6c 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72  lose(bool canThr
1ef0: 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ow)..    {..    
1f00: 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75    if (_sql != nu
1f10: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
1f20: 20 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71          if (!_sq
1f30: 6c 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20  l.OwnHandle)..  
1f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f50: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20           _sql = 
1f60: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
1f70: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
1f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f90: 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
1fa0: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
1fb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fc0: 20 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e   if (SQLiteBase.
1fd0: 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  ResetConnection(
1fe0: 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54  _sql, _sql, canT
1ff0: 68 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20  hrow))..        
2000: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 49 4e 54        {..#if INT
2010: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
2020: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
2030: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
2040: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
2050: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2060: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2070: 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66  ctionPool.Add(_f
2080: 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f  ileName, _sql, _
2090: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
20a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
20c0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
20d0: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
20e0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2110: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c  tionEventType.Cl
2120: 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c  osedToPool, null
2130: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2150: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
2160: 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20   _fileName, new 
2170: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33    typeof(SQLite3
21a0: 29 2c 20 63 61 6e 54 68 72 6f 77 2c 20 5f 66 69  ), canThrow, _fi
21b0: 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65 72  leName, _poolVer
21c0: 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66  sion }));....#if
21d0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
21e0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
21f0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2200: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2210: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
2220: 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f  ormat("Close (Po
2230: 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d  ol) Success: {0}
2240: 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64  ", _sql));..#end
2250: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2260: 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
2270: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2280: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2290: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
22a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22c0: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
22d0: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
22e0: 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29  at("Close (Pool)
22f0: 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 20   Failure: {0}", 
2300: 5f 73 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 20  _sql));..       
2310: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
2320: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
2330: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2340: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2350: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44            _sql.D
2360: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
2370: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2380: 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a    _sql = null;..
2390: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
23a0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
2410: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2420: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
2430: 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  number of times 
2440: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
2450: 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64  ancel" /> method
2460: 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
2470: 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  // called...    
2480: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2490: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
24a0: 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29  GetCancelCount()
24b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
24c0: 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63   return Interloc
24d0: 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61  ked.CompareExcha
24e0: 6e 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43  nge(ref _cancelC
24f0: 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  ount, 0, 0);..  
2500: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
2510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2570: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2580: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
2590: 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 20  thod determines 
25a0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
25b0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
25c0: 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d  teException" />.
25d0: 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61 20  .    /// with a 
25e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c  return code of <
25f0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2600: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
2610: 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a  upt" /> should..
2620: 20 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77      /// be throw
2630: 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20 61  n after making a
2640: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53   call into the S
2650: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
2660: 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ry...    /// </s
2670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2680: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2690: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
26a0: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  a <see cref="SQL
26b0: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  iteException" />
26c0: 20 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20 20   to be thrown.  
26d0: 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  This method..   
26e0: 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72   /// will only r
26f0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
2700: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
2710: 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68  "Cancel" /> meth
2720: 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20  od was called.. 
2730: 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f     /// one or mo
2740: 72 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  re times during 
2750: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
2760: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
2770: 61 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a  ary (e.g. when..
2780: 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69      /// the sqli
2790: 74 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20 6f  te3_prepare*() o
27a0: 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
27b0: 20 41 50 49 73 20 61 72 65 20 75 73 65 64 29 2e   APIs are used).
27c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
27d0: 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
27e0: 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72  e bool ShouldThr
27f0: 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20  owForCancel().. 
2800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2810: 74 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f  turn GetCancelCo
2820: 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20  unt() > 0;..    
2830: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
28b0: 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74 68     /// Resets th
28c0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 3c  e value of the <
28d0: 73 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63 65  see cref="_cance
28e0: 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64  lCount" /> field
28f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2900: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
2910: 74 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e 63  te int ResetCanc
2920: 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b  elCount()..    {
2930: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2940: 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d   Interlocked.Com
2950: 70 61 72 65 45 78 63 68 61 6e 67 65 28 72 65 66  pareExchange(ref
2960: 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30   _cancelCount, 0
2970: 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b  , _cancelCount);
2980: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2a00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
2a10: 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75  empts to interru
2a20: 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72  pt the query cur
2a30: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
2a40: 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74   on the associat
2a50: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  ed..    /// nati
2a60: 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
2a70: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
2a80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2aa0: 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  de void Cancel()
2ab0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74  ..    {..      t
2ac0: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
2ad0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
2ae0: 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ng...      }..  
2af0: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
2b00: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
2b10: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
2b20: 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  */..      {..   
2b30: 20 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64       Interlocked
2b40: 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 5f  .Increment(ref _
2b50: 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20  cancelCount);.. 
2b60: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
2b70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2b80: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71  e3_interrupt(_sq
2b90: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
2ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2bb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2bc0: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
2bd0: 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66  binds a user-def
2be0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
2bf0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
2c00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2c10: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
2c20: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74  aram name="funct
2c30: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a  ionAttribute">..
2c40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2c50: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
2c60: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f  ctionAttribute"/
2c70: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
2c80: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..  
2c90: 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61    /// the metada
2ca0: 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  ta for the funct
2cb0: 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e  ion to be bound.
2cc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
2cd0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2ce0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
2cf0: 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  n">..    /// The
2d00: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2d10: 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62  teFunction"/> ob
2d20: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68  ject instance th
2d30: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
2d40: 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
2d50: 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e  ion to be bound.
2d60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
2d70: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2d80: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
2d90: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
2da0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
2db0: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
2dc0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
2dd0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
2de0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
2df0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
2e00: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  BindFunction(.. 
2e10: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
2e20: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66  ctionAttribute f
2e30: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
2e40: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
2e50: 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69  eFunction functi
2e60: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on,..        SQL
2e70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2e80: 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20  gs flags..      
2e90: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
2ea0: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
2eb0: 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c  Attribute == nul
2ec0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ed0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
2ee0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
2ef0: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
2f00: 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  te");....       
2f10: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d   if (function ==
2f20: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f30: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
2f40: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
2f50: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b  ion("function");
2f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
2f70: 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46  teFunction.BindF
2f80: 75 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66 75  unction(this, fu
2f90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
2fa0: 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73   function, flags
2fb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
2fc0: 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20   (_functions == 
2fd0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2fe0: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20     _functions = 
2ff0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53  new Dictionary<S
3000: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
3010: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
3020: 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20  nction>();....  
3030: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
3040: 5b 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  [functionAttribu
3050: 74 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d  te] = function;.
3060: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3070: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3080: 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69   /// This functi
3090: 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d  on binds a user-
30a0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
30b0: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
30c0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
30d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
30e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
30f0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
3100: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
3110: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
3120: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
3130: 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  e"/> object inst
3140: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
3150: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74  .    /// the met
3160: 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75  adata for the fu
3170: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62  nction to be unb
3180: 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ound...    /// <
3190: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
31a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
31b0: 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ags">..    /// T
31c0: 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
31d0: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72  ted with the par
31e0: 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ent connection o
31f0: 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
3200: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3210: 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a  / <returns>Non-z
3220: 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74  ero if the funct
3230: 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 20  ion was unbound 
3240: 61 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65  and removed.</re
3250: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
3260: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
3270: 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  ol UnbindFunctio
3280: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
3290: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
32a0: 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
32b0: 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  ibute,..        
32c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
32d0: 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20  Flags flags..   
32e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
32f0: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
3300: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20  ionAttribute == 
3310: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3320: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
3330: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
3340: 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  on("functionAttr
3350: 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  ibute");....    
3360: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
3370: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
3380: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3390: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
33a0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
33b0: 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20   function;....  
33c0: 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74        if (_funct
33d0: 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
33e0: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
33f0: 74 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e  te, out function
3400: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
3410: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
3420: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
3430: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  bindFunction(.. 
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 20 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69 6f     this, functio
3460: 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63  nAttribute, func
3470: 74 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d  tion, flags) &&.
3480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3490: 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f   _functions.Remo
34a0: 76 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  ve(functionAttri
34b0: 62 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bute))..        
34c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
34e0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
34f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
3500: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3510: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  false;..    }...
3520: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3530: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
3540: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
3550: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
3560: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3570: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d   SQLiteVersion;.
3580: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3590: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
35a0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65 72  override int Ver
35b0: 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20  sionNumber..    
35c0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
35d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
35e0: 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73  eturn SQLiteVers
35f0: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
3600: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
3610: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
3620: 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43  c string DefineC
3630: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d  onstants..    {.
3640: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
3650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3660: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
3670: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
3680: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
3690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c  ..            IL
36a0: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
36b0: 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43   = SQLiteDefineC
36c0: 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c  onstants.OptionL
36d0: 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
36e0: 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20      if (list != 
36f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3700: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3710: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
3720: 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e  tring element in
3730: 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20   list)..        
3740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  f (element == nu
3770: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
3790: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37b0: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
37c0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37e0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
37f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3800: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3810: 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b  Append(element);
3820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3830: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3840: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3850: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
3860: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
3870: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3880: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
3890: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
38a0: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
38b0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
38c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
38d0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
38e0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
38f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
3900: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
3910: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3920: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3930: 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69   static int SQLi
3940: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  teVersionNumber.
3950: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
3960: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
3970: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
3980: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3990: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
39a0: 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20  n_number();..   
39b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
39c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
39d0: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
39e0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
39f0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
3a00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
3a10: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3a20: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3a30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
3a40: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
3a50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3a60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
3a70: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
3a80: 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  teCompileOptions
3a90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3aa0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
3ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72  .            Str
3ac0: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
3ad0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
3ae0: 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  ilder();..      
3af0: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
3b00: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
3b10: 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20    IntPtr zValue 
3b20: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3b30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
3b40: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
3b50: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20  index++);....   
3b60: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
3b70: 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72  zValue != IntPtr
3b80: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
3b90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3ba0: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
3bb0: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
3be0: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
3bf0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
3c00: 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74  .Append(UTF8ToSt
3c10: 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29  ring(zValue, -1)
3c20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3c30: 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73      zValue = Uns
3c40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3c50: 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  .sqlite3_compile
3c60: 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78  option_get(index
3c70: 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ++);..          
3c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3c90: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
3ca0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
3cb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3cc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
3cd0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74  tatic string Int
3ce0: 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..   
3cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
3d00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
3d10: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3d30: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
3d40: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
3d50: 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69  thods.interop_li
3d60: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
3d70: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
3d80: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
3d90: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
3da0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3db0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
3dc0: 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f  ic string Intero
3dd0: 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  pSourceId..    {
3de0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
3df0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
3e00: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3e20: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
3e30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3e40: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72  ods.interop_sour
3e50: 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65  ceid(), -1);..#e
3e60: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3e70: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
3e80: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
3e90: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3ea0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
3eb0: 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d  tring InteropCom
3ec0: 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20  pileOptions..   
3ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
3ee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
3ef0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
3f10: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
3f20: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
3f30: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
3f40: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
3f50: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
3f60: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
3f70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3f80: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63  ethods.interop_c
3f90: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
3fa0: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
3fb0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
3fc0: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
3fd0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
3fe0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3ff0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
4000: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4020: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4030: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4040: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
4050: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
4060: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
4070: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4080: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
4090: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
40a0: 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c  s.interop_compil
40b0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
40c0: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
40d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
40e0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
40f0: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23  t.ToString();..#
4100: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4110: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4120: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4130: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4140: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4150: 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69  e bool AutoCommi
4160: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
4170: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
4180: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41        return IsA
4190: 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20  utocommit(_sql, 
41a0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  _sql);..      }.
41b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
41c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
41d0: 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52  long LastInsertR
41e0: 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  owId..    {..   
41f0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
4200: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4210: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4220: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4230: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4240: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
4250: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73  _insert_rowid(_s
4260: 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ql);..#elif !SQL
4270: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4280: 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64        long rowId
4290: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55   = 0;..        U
42a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
42b0: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ds.sqlite3_last_
42c0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74  insert_rowid_int
42d0: 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72  erop(_sql, ref r
42e0: 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  owId);..        
42f0: 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23  return rowId;..#
4300: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
4310: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
4320: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
4330: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4340: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4350: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4360: 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d  ide int Changes.
4370: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4380: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
4390: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
43a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
43b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
43c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61  hods.sqlite3_cha
43d0: 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71  nges_interop(_sq
43e0: 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  l);..#else..    
43f0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
4400: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f  qlite3_changes(_
4420: 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  sql);..#endif.. 
4430: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4440: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4450: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
4460: 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
4470: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4490: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
44a0: 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20  MemoryUsed;..   
44b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
44c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
44d0: 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63  atic long Static
44e0: 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20  MemoryUsed..    
44f0: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4500: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4510: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
4520: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
4530: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
4540: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4550: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
4560: 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20  _used();..#elif 
4570: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
4580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
4590: 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20  ng bytes = 0;.. 
45a0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
45b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
45c0: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
45d0: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
45e0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
45f0: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
4600: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4610: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
4620: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
4630: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
4640: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
4650: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4660: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
4670: 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74  ng MemoryHighwat
4680: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
4690: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
46a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
46b0: 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f  eturn StaticMemo
46c0: 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20  ryHighwater;..  
46d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
46e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
46f0: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
4700: 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72  cMemoryHighwater
4710: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4720: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
4730: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4740: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4760: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
4770: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4780: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
4790: 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  (0);..#elif !SQL
47a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
47b0: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62            long b
47c0: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
47d0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
47e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
47f0: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
4800: 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72  ter_interop(0, r
4810: 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  ef bytes);..    
4820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
4830: 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ytes;..#else..  
4840: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
4850: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
4860: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
4870: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4880: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4890: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
48a0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e     /// Returns n
48b0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75  on-zero if the u
48c0: 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65  nderlying native
48d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
48e0: 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20  le is owned..   
48f0: 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73   /// by this ins
4900: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
4910: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
4920: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4930: 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65  e bool OwnHandle
4940: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4950: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
4960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4970: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
49a0: 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f  Exception("no co
49b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
49c0: 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a  available");....
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
49e0: 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c  rn _sql.OwnHandl
49f0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
4a00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
4a10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4a20: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c  // Returns the l
4a30: 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f 66 20 66  ogical list of f
4a40: 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f 63 69 61  unctions associa
4a50: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63 6f  ted with this co
4a60: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
4a70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4a80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4a90: 72 69 64 65 20 49 44 69 63 74 69 6f 6e 61 72 79  ride IDictionary
4aa0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
4ab0: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
4ac0: 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69  Function> Functi
4ad0: 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ons..    {..    
4ae0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
4af0: 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a   _functions; }..
4b00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4b10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
4b20: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
4b30: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
4b40: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
4b50: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4b60: 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72  n StaticSetMemor
4b70: 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d  yStatus(value);.
4b80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4b90: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
4ba0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
4bb0: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
4bc0: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
4bd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4be0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4bf0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
4c00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4c10: 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20  _config_int(..  
4c20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
4c30: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
4c40: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
4c50: 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31  TATUS, value ? 1
4c60: 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   : 0);....      
4c70: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
4c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
4c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4ca0: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72  / Attempts to fr
4cb0: 65 65 20 61 73 20 6d 75 63 68 20 68 65 61 70 20  ee as much heap 
4cc0: 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62  memory as possib
4cd0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
4ce0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ase connection..
4cf0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4d00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
4d10: 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64  turns>A standard
4d20: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
4d30: 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66  ode (i.e. zero f
4d40: 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e  or success and n
4d50: 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c  on-zero for fail
4d60: 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ure).</returns>.
4d70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4d80: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
4d90: 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65  orCode ReleaseMe
4da0: 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  mory()..    {.. 
4db0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
4dc0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
4dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4de0: 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
4df0: 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b  se_memory(_sql);
4e00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4e10: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
4e20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4e30: 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
4e40: 74 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74  ts to free N byt
4e50: 65 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72  es of heap memor
4e60: 79 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e  y by deallocatin
4e70: 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  g non-essential 
4e80: 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  memory..    /// 
4e90: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64  allocations held
4ea0: 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73 65   by the database
4eb0: 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79   library. Memory
4ec0: 20 75 73 65 64 20 74 6f 20 63 61 63 68 65 20 64   used to cache d
4ed0: 61 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20  atabase pages.. 
4ee0: 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76     /// to improv
4ef0: 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73  e performance is
4f00: 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e   an example of n
4f10: 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d  on-essential mem
4f20: 6f 72 79 2e 20 20 54 68 69 73 20 69 73 20 61 20  ory.  This is a 
4f30: 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72  no-op..    /// r
4f40: 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66  eturning zero if
4f50: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
4f60: 20 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74   library was not
4f70: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
4f80: 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d  he compile-time.
4f90: 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20  .    /// option 
4fa0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
4fb0: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e  MORY_MANAGEMENT.
4fc0: 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74    Optionally, at
4fd0: 74 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20  tempts to reset 
4fe0: 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20  and/or..    /// 
4ff0: 63 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33  compact the Win3
5000: 32 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69  2 native heap, i
5010: 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20  f applicable... 
5020: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5030: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5040: 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e  m name="nBytes">
5050: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65  ..    /// The re
5060: 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f  quested number o
5070: 66 20 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e  f bytes to free.
5080: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5090: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
50a0: 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e  am name="reset">
50b0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
50c0: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20  ro to attempt a 
50d0: 68 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20  heap reset...   
50e0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
50f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5100: 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20  me="compact">.. 
5110: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
5120: 74 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70 20  to attempt heap 
5130: 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20  compaction...   
5140: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5150: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5160: 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20  me="nFree">..   
5170: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
5180: 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c  of bytes actuall
5190: 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20 76  y freed.  This v
51a0: 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f  alue may be zero
51b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
51c0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
51d0: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f  ram name="resetO
51e0: 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  k">..    /// Thi
51f0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
5200: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
5210: 68 65 61 70 20 72 65 73 65 74 20 77 61 73 20 73  heap reset was s
5220: 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20  uccessful...    
5230: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
5240: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5250: 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20  e="nLargest">.. 
5260: 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20     /// The size 
5270: 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 63  of the largest c
5280: 6f 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c  ommitted free bl
5290: 6f 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c  ock in the heap,
52a0: 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20   in bytes...    
52b0: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77  /// This value w
52c0: 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65  ill be zero unle
52d0: 73 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69  ss heap compacti
52e0: 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a  on is enabled...
52f0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5300: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
5310: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
5320: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
5330: 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e  eturn code (i.e.
5340: 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73   zero for succes
5350: 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a  s and non-zero..
5360: 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c      /// for fail
5370: 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ure)...    /// <
5380: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
5390: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
53a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
53b0: 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f  taticReleaseMemo
53c0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ry(..        int
53d0: 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20   nBytes,..      
53e0: 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20    bool reset,.. 
53f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
5400: 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  act,..        re
5410: 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20  f int nFree,..  
5420: 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72        ref bool r
5430: 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20  esetOk,..       
5440: 20 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65   ref uint nLarge
5450: 73 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  st..        ).. 
5460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
5470: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
5480: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
5490: 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  de.Ok;....      
54a0: 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c    int nFreeLocal
54b0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
54c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
54d0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42  elease_memory(nB
54e0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
54f0: 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63  uint nLargestLoc
5500: 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  al = 0;..       
5510: 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63   bool resetOkLoc
5520: 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23  al = false;....#
5530: 69 66 20 21 44 45 42 55 47 20 26 26 20 57 49 4e  if !DEBUG && WIN
5540: 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68  DOWS // NOTE: Sh
5550: 6f 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45  ould be "WIN32HE
5560: 41 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20  AP && !MEMDEBUG 
5570: 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20  && WINDOWS"..   
5580: 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20       if ((rc == 
5590: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
55a0: 4f 6b 29 20 26 26 20 72 65 73 65 74 29 0d 0a 20  Ok) && reset).. 
55b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
55c0: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
55d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
55e0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73  qlite3_win32_res
55f0: 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20  et_heap();....  
5600: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
5610: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
5620: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
5630: 20 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b           resetOk
5640: 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20  Local = true;.. 
5650: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5660: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
5670: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
5680: 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a  k) && compact)..
5690: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
56a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
56b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
56c0: 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28  32_compact_heap(
56d0: 72 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61  ref nLargestLoca
56e0: 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  l);..#else..    
56f0: 20 20 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c      if (reset ||
5700: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
5710: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69         rc = SQLi
5720: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46  teErrorCode.NotF
5730: 6f 75 6e 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ound;..#endif...
5740: 0a 20 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d  .        nFree =
5750: 20 6e 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20   nFreeLocal;..  
5760: 20 20 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d        nLargest =
5770: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d   nLargestLocal;.
5780: 0a 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b  .        resetOk
5790: 20 3d 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b   = resetOkLocal;
57a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
57b0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
57c0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
57d0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
57e0: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
57f0: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
5800: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
5810: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
5820: 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69  t..    /// confi
5830: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
5840: 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  .  We depend on 
5850: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
5860: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
5870: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5880: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
5890: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
58a0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
58b0: 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65  result code.</re
58c0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
58d0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
58e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68  LiteErrorCode Sh
58f0: 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d  utdown()..    {.
5900: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5910: 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66  StaticShutdown(f
5920: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
5930: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5940: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
5950: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
5960: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
5970: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
5980: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
5990: 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69  t..    /// confi
59a0: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
59b0: 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  .  We depend on 
59c0: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
59d0: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
59e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
59f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5a00: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74  ram name="direct
5a10: 6f 72 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ories">..    ///
5a20: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73   Non-zero to res
5a30: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
5a40: 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
5a50: 72 65 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65  rectories to the
5a60: 69 72 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61  ir..    /// defa
5a70: 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
5a80: 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
5a90: 20 66 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73   for both.  This
5aa0: 20 70 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e   parameter has n
5ab0: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63  o..    /// effec
5ac0: 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73  t on non-Windows
5ad0: 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
5ae0: 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ms...    /// </p
5af0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5b00: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
5b10: 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  a standard SQLit
5b20: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f  e result code.</
5b30: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
5b40: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
5b50: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
5b60: 61 74 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20  aticShutdown(.. 
5b70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65         bool dire
5b80: 63 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20  ctories..       
5b90: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
5ba0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5bb0: 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72  de rc = SQLiteEr
5bc0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20  rorCode.Ok;.... 
5bd0: 20 20 20 20 20 20 20 69 66 20 28 64 69 72 65 63         if (direc
5be0: 74 6f 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20  tories)..       
5bf0: 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d   {..#if WINDOWS.
5c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5c10: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
5c20: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
5c40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5c50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
5c60: 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
5c70: 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  (1, null);....  
5c80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
5c90: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
5ca0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
5cb0: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
5cc0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5cd0: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
5ce0: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 32 2c  set_directory(2,
5cf0: 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a   null);..#else..
5d00: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
5d10: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
5d20: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
5d30: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
5d40: 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Line(..         
5d50: 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
5d60: 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64  : Cannot reset d
5d70: 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68  irectories on th
5d80: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d  is platform.");.
5d90: 0a 23 65 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d  .#endif..#endif.
5da0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
5db0: 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
5dc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5dd0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
5de0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
5df0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5e00: 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d  3_shutdown();...
5e10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5e20: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
5e30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5e40: 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
5e50: 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f 63  nes if the assoc
5e60: 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  iated native con
5e70: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
5e80: 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  s open...    ///
5e90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5ea0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
5eb0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
5ec0: 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   if the associat
5ed0: 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ed native connec
5ee0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
5ef0: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
5f00: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
5f10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5f20: 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20  bool IsOpen().. 
5f30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
5f40: 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75  turn (_sql != nu
5f50: 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49  ll) && !_sql.IsI
5f60: 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e  nvalid && !_sql.
5f70: 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d  IsClosed;..    }
5f80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5f90: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f   override void O
5fa0: 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69  pen(string strFi
5fb0: 6c 65 6e 61 6d 65 2c 20 73 74 72 69 6e 67 20 76  lename, string v
5fc0: 66 73 4e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f  fsName, SQLiteCo
5fd0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f  nnectionFlags co
5fe0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53  nnectionFlags, S
5ff0: 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e  QLiteOpenFlagsEn
6000: 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e  um openFlags, in
6010: 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62  t maxPoolSize, b
6020: 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  ool usePool)..  
6030: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20    {..      //.. 
6040: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
6050: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
6060: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
6070: 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65  ently open, atte
6080: 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f  mpt to..      //
6090: 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20         close it 
60a0: 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20  now.  This must 
60b0: 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20  be done because 
60c0: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72  the file name or
60d0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
60e0: 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72   other parameter
60f0: 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63  s that may impac
6100: 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  t the underlying
6110: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
6120: 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63   //       connec
6130: 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68  tion may have ch
6140: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  anged...      //
6150: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
6160: 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28   != null) Close(
6170: 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
6180: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
6190: 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63  E: If the connec
61a0: 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f  tion was not clo
61b0: 73 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  sed successfully
61c0: 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20  , throw an..    
61d0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
61e0: 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  tion now...     
61f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
6200: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql != null)..  
6210: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
6220: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
6230: 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
6240: 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63  ndle is still ac
6250: 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tive");....     
6260: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50   _usePool = useP
6270: 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c  ool;..      _fil
6280: 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e  eName = strFilen
6290: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ame;....      if
62a0: 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20   (usePool)..    
62b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71    {..        _sq
62c0: 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  l = SQLiteConnec
62d0: 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28  tionPool.Remove(
62e0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78  strFilename, max
62f0: 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70  PoolSize, out _p
6300: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  oolVersion);....
6310: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
6320: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
6330: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
6340: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
6350: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
6360: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
6370: 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46  ventType.OpenedF
6380: 72 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e  romPool, null, n
6390: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
63a0: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
63b0: 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ql, strFilename,
63c0: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
63d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
63e0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74  eof(SQLite3), st
63f0: 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61  rFilename, vfsNa
6400: 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  me, connectionFl
6410: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
6420: 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78    openFlags, max
6430: 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f  PoolSize, usePoo
6440: 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20  l, _poolVersion 
6450: 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  }));....#if !NET
6460: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
6470: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
6480: 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57  .        Trace.W
6490: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
64a0: 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f  Format("Open (Po
64b0: 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c  ol): {0}", (_sql
64c0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c   != null) ? _sql
64d0: 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c  .ToString() : "<
64e0: 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69  null>"));..#endi
64f0: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  f..      }....  
6500: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
6510: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
6520: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
6530: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6540: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
6550: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
6560: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
6570: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
6580: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
6590: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
65a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e 74 50  ..          IntP
65b0: 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72 2e 5a  tr db = IntPtr.Z
65c0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
65d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
65e0: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
65f0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
6600: 20 20 20 20 20 20 69 6e 74 20 65 78 74 46 75 6e        int extFun
6610: 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74 69 6f  cs = ((connectio
6620: 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  nFlags & SQLiteC
6630: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
6640: 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69  oExtensionFuncti
6650: 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ons) != SQLiteCo
6660: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
6670: 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
6680: 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a  ns) ? 1 : 0;....
6690: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78            if (ex
66a0: 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a 20 20  tFuncs != 0)..  
66b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
66c0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
66d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
66e0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
66f0: 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69  rop(ToUTF8(strFi
6700: 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46 38 28  lename), ToUTF8(
6710: 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c  vfsName), openFl
6720: 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 72  ags, extFuncs, r
6730: 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  ef db);..       
6740: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6750: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
6760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6770: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
6780: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6790: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54  qlite3_open_v2(T
67a0: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
67b0: 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70 65 6e  e), ref db, open
67c0: 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28 76 66  Flags, ToUTF8(vf
67d0: 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20  sName));..      
67e0: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45      }....#if !NE
67f0: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
6800: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
6810: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63  ..          Trac
6820: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
6830: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a  ng.Format("Open:
6840: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
6850: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
6860: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
6870: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
6880: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6890: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
68a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
68b0: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
68c0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
68d0: 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  db, true);..    
68e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
68f0: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
6900: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
6910: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
6920: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
6930: 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  / }....        S
6940: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
6950: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
6960: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
6970: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
6980: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
6990: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
69a0: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
69b0: 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
69c0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
69d0: 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74  , null, _sql, st
69e0: 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f  rFilename, new o
69f0: 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20  bject[] {..     
6a00: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
6a10: 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e  Lite3), strFilen
6a20: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f  ame, vfsName, co
6a30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a  nnectionFlags,..
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
6a50: 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69  Flags, maxPoolSi
6a60: 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b  ze, usePool }));
6a70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
6a80: 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74     // Bind funct
6a90: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e  ions to this con
6aa0: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79  nection.  If any
6ab0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
6ac0: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ons of the same 
6ad0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77  name..      // w
6ae0: 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e  ere already boun
6af0: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  d, then the new 
6b00: 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65  bindings replace
6b10: 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20   the old...     
6b20: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
6b30: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
6b40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
6b50: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21  BindFunctions) !
6b60: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6b70: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
6b80: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
6b90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
6ba0: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
6bb0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6bc0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
6bd0: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
6be0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
6bf0: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
6c00: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
6c10: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
6c20: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53   (KeyValuePair<S
6c30: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
6c40: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
6c50: 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20  nction> pair..  
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c70: 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  in SQLiteFunctio
6c80: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
6c90: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
6ca0: 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  Flags))..       
6cb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6cc0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70      _functions[p
6cd0: 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e  air.Key] = pair.
6ce0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
6cf0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
6d00: 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74        SetTimeout
6d10: 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b  (0);..      GC.K
6d20: 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d  eepAlive(_sql);.
6d30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6d40: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6d50: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
6d60: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
6d70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
6d80: 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66  ool.ClearPool(_f
6d90: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ileName);..    }
6da0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6db0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
6dc0: 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  untPool()..    {
6dd0: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
6de0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74  nary<string, int
6df0: 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b  > counts = null;
6e00: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70  ..        int op
6e10: 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  enCount = 0;..  
6e20: 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43        int closeC
6e30: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
6e40: 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e     int totalCoun
6e50: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
6e60: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
6e70: 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73  onPool.GetCounts
6e80: 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  (_fileName,..   
6e90: 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75           ref cou
6ea0: 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75  nts, ref openCou
6eb0: 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75  nt, ref closeCou
6ec0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
6ed0: 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29   ref totalCount)
6ee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
6ef0: 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d  urn totalCount;.
6f00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6f10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6f20: 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28  void SetTimeout(
6f30: 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d  int nTimeoutMS).
6f40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
6f50: 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d  tPtr db = _sql;.
6f60: 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d  .      if (db ==
6f70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68   IntPtr.Zero) th
6f80: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
6f90: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
6fa0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
6fb0: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  ailable");..    
6fc0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6fd0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6fe0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6ff0: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
7000: 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  b, nTimeoutMS);.
7010: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
7020: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7030: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7040: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7050: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
7060: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7070: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7080: 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69  e bool Step(SQLi
7090: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
70a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
70b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
70c0: 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d  n;..      Random
70d0: 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   rnd = null;..  
70e0: 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69      uint startti
70f0: 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72  ck = (uint)Envir
7100: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
7110: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69  ;..      uint ti
7120: 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73  meout = (uint)(s
7130: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f  tmt._command._co
7140: 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31  mmandTimeout * 1
7150: 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52  000);....      R
7160: 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28  esetCancelCount(
7170: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
7180: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
7190: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
71a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
71b0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
71c0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
71d0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
71e0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
71f0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
7200: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
7210: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e    {..          n
7220: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7230: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
7240: 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tep(stmt._sqlite
7250: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20  _stmt);..       
7260: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
7270: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
7280: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
7290: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
72a0: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
72b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
72c0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
72d0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
72e0: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
72f0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
7300: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
7310: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
7320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7340: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
7350: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a  ode.Interrupt;..
7360: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
7380: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7390: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
73a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
73b0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
73c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
73d0: 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72  Interrupt) retur
73e0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
73f0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
7400: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
7410: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
7420: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
7430: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
7440: 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73  one) return fals
7450: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
7460: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
7470: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
7480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7490: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
74a0: 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   r;....         
74b0: 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63   // An error occ
74c0: 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74  urred, attempt t
74d0: 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74  o reset the stat
74e0: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72  ement.  If the r
74f0: 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61  eset worked beca
7500: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
7510: 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73     // schema has
7520: 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79   changed, re-try
7530: 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e   the step again.
7540: 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20    If it errored 
7550: 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20  our because the 
7560: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
7570: 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64      // is locked
7580: 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72  , then keep retr
7590: 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63  ying until the c
75a0: 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f  ommand timeout o
75b0: 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
75c0: 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74    r = Reset(stmt
75d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
75e0: 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  if (r == SQLiteE
75f0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
7600: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7610: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7620: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
7630: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
7640: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72       else if ((r
7650: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7660: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20  ode.Locked || r 
7670: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
7680: 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74  de.Busy) && stmt
7690: 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c  ._command != nul
76a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
76b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
76c0: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
76d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
76e0: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
76f0: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
7700: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
7710: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
7720: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
7730: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
7740: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
7750: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
7760: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
7770: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
7780: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
7790: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
77a0: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
77b0: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
77c0: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d  tick > timeout).
77d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
77f0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7800: 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61  ception(r, GetLa
7810: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7820: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7830: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
7840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7850: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
7860: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
7870: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
7880: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
7890: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
78a0: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
78b0: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
78c0: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
78d0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
78e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
78f0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
7900: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
7910: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7920: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
7930: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
7940: 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79  r() core library
7950: 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65   API been checke
7960: 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20  d for yet?..    
7970: 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74  /// If so, is it
7980: 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f   present?..    /
7990: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
79a0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
79b0: 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72  c bool? have_err
79c0: 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  str = null;.... 
79d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
79e0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
79f0: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
7a00: 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63  age for the spec
7a10: 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74  ified SQLite ret
7a20: 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a  urn code using..
7a30: 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69      /// the sqli
7a40: 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e  te3_errstr() fun
7a50: 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62  ction, falling b
7a60: 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72  ack to the inter
7a70: 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20  nal lookup..    
7a80: 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63  /// table if nec
7a90: 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  essary...    ///
7aa0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7ab0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7ac0: 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65  ="rc">The SQLite
7ad0: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70   return code.</p
7ae0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7af0: 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f  returns>The erro
7b00: 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c  r message or nul
7b10: 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
7b20: 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  e found.</return
7b30: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
7b40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
7b50: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
7b60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
7b70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7b80: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
7ba0: 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d   (have_errstr ==
7bb0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7bc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7bd0: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
7be0: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
7bf0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
7c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c10: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28   have_errstr = (
7c20: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
7c30: 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20   3007015);..    
7c40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7c50: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
7c60: 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d  ol)have_errstr).
7c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c90: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
7ca0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7cb0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28  .sqlite3_errstr(
7cc0: 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc);....        
7cd0: 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72 20          if (ptr 
7ce0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
7cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d00: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
7d10: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7d20: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7d30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
7d40: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69  arshal.PtrToStri
7d50: 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65  ngAnsi(ptr);..#e
7d60: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
7d70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7d80: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
7d90: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7dc0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7dd0: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
7de0: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
7df0: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
7e00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7e10: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
7e20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c        return Fal
7e40: 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72  lbackGetErrorStr
7e50: 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d  ing(rc);..    }.
7e60: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7e70: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
7e80: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
7e90: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f  mt_readonly() co
7ea0: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
7eb0: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
7ec0: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
7ed0: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
7ee0: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
7ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
7f00: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
7f10: 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  ? have_stmt_read
7f20: 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  only = null;....
7f30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7f40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
7f50: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
7f60: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
7f70: 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f  tement is read-o
7f80: 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a  nly in nature...
7f90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7fa0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
7fb0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
7fc0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
7fd0: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
7fe0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7ff0: 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74  >True if the out
8000: 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61 64  er query is read
8010: 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e  -only.</returns>
8020: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8030: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52  verride bool IsR
8040: 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadOnly(..      
8050: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8060: 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20  t stmt..        
8070: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8080: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
80a0: 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64   (have_stmt_read
80b0: 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  only == null).. 
80c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
80e0: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
80f0: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
8100: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8110: 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d          have_stm
8120: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65  t_readonly = (ve
8130: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
8140: 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20  007004);..      
8150: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8160: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
8170: 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f  )have_stmt_reado
8180: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
8190: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81a0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
81b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
81c0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61  sqlite3_stmt_rea
81d0: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
81f0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21  ._sqlite_stmt) !
8200: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
8210: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8220: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
8230: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
8240: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
8250: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8260: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8270: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
8280: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8290: 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20  false; /* NOTE: 
82a0: 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20  Unknown, assume 
82b0: 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d  false. */..    }
82c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
82d0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
82e0: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
82f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8300: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
8310: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8320: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
8330: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8340: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
8350: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8360: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
8370: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
8380: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
8390: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
83a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
83b0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
83c0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
83d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
83e0: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
83f0: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
8400: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
8410: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
8420: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8430: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
8440: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
8450: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
8460: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
8470: 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e    string str = n
8480: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  ull;..        us
8490: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
84a0: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
84b0: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
84c0: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
84d0: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
84e0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
84f0: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
8500: 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20   ref str))..    
8510: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8520: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
8530: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
8540: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
8550: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8560: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
8570: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
8580: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
8590: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
85a0: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
85b0: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
85c0: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
85d0: 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20 21         if (tmp !
85e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
85f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8600: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
8610: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
8620: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
8630: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
8640: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  _stmt = null;.. 
8650: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8660: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
8670: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
8680: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
8690: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
86a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
86b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
86c0: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
86d0: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
86e0: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
86f0: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
8700: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
8710: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
8720: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
8730: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
8740: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
8750: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
8760: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
8770: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8780: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
8790: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
87a0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
87b0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
87c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
87d0: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
87e0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
87f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8800: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8810: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
8820: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
8830: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
8840: 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b  LastError(null);
8850: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8860: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8870: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
8880: 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56  rror(string defV
8890: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
88a0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
88b0: 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65  ult = SQLiteBase
88c0: 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73  .GetLastError(_s
88d0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
88e0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
88f0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
8900: 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64  ult)) result = d
8910: 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  efValue;..      
8920: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
8930: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
89a0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75  ..    #region Qu
89b0: 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20  ery Diagnostics 
89c0: 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c  Support..#if !PL
89d0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
89e0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f  AMEWORK..    ///
89f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8a00: 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
8a10: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
8a20: 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20  rack of whether 
8a30: 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20  or not the..    
8a40: 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63  /// "SQLite_Forc
8a50: 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76  eLogPrepare" env
8a60: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
8a70: 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72 69  e has been queri
8a80: 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20  ed.  If so,..   
8a90: 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c   /// it will onl
8aa0: 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  y be non-zero if
8ab0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
8ac0: 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70 72   variable was pr
8ad0: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  esent...    /// 
8ae0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8af0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
8b00: 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65  ool? forceLogPre
8b10: 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pare = null;....
8b20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
8b90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8ba0: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
8bb0: 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65  all calls to pre
8bc0: 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79  pare a SQL query
8bd0: 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c   will be logged,
8be0: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64  ..    /// regard
8bf0: 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67  less of the flag
8c00: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
8c10: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
8c20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8c30: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
8c40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
8c50: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67   Non-zero to log
8c60: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
8c70: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
8c80: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
8c90: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
8ca0: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
8cb0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
8cc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8cd0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
8ce0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8cf0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
8d00: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d  rceLogPrepare ==
8d10: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d30: 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66         if (Unsaf
8d40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
8d50: 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d  etSettingValue(.
8d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8d70: 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
8d80: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
8d90: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c  ", null) != null
8da0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8db0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8dc0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
8dd0: 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65  ogPrepare = true
8de0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8df0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8e00: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e30: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
8e40: 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  re = false;..   
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
8e80: 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c  urn (bool)forceL
8e90: 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20  ogPrepare;..    
8ea0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
8eb0: 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65  ndif..    #endre
8ec0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
8ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8f30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8f40: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
8f50: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
8f60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
8f70: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
8f80: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
8f90: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
8fa0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
8fb0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
8fc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8fd0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
8fe0: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
8ff0: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
9000: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9010: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
9020: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
9030: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
9040: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
9050: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
9060: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
9070: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
9080: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
9090: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
90a0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
90b0: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
90c0: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
90d0: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
90e0: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
90f0: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
9100: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
9110: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
9120: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
9130: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
9140: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
9150: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
9160: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
9170: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
9180: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
9190: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
91a0: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
91b0: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
91c0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
91d0: 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
91e0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
91f0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  ariantCulture,..
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b                "[
9210: 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65  {0}].", baseSche
9220: 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e  maName), String.
9230: 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
9240: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
9250: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
9270: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
9280: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
9290: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
92a0: 20 20 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20          "{0}.", 
92b0: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
92c0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
92d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
92e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c    }....      SQL
92f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9300: 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20  gs flags =..    
9310: 20 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75        (cnn != nu
9320: 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20  ll) ? cnn.Flags 
9330: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
9340: 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b  onFlags.Default;
9350: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 0d 0a  ....      if (..
9360: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
9370: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
9380: 20 20 20 20 20 20 20 20 20 20 46 6f 72 63 65 4c            ForceL
9390: 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 0d 0a  ogPrepare() ||..
93a0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
93b0: 20 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69    ((flags & SQLi
93c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
93d0: 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d  s.LogPrepare) ==
93e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
93f0: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
9400: 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  e))..      {..  
9410: 20 20 20 20 20 20 20 20 69 66 20 28 28 73 74 72          if ((str
9420: 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  Sql == null) || 
9430: 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d  (strSql.Length =
9440: 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e  = 0) || (strSql.
9450: 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d  Trim().Length ==
9460: 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20   0))..          
9470: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
9480: 67 4d 65 73 73 61 67 65 28 22 50 72 65 70 61 72  gMessage("Prepar
9490: 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e  ing {<nothing>}.
94a0: 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ..");..         
94b0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
94c0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
94d0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
94e0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
9500: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
9510: 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72 69  ulture, "Prepari
9520: 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20  ng {{{0}}}...", 
9530: 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20  strSql));..     
9540: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50   }....      IntP
9550: 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72  tr stmt = IntPtr
9560: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e  .Zero;..      In
9570: 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74  tPtr ptr = IntPt
9580: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69  r.Zero;..      i
9590: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
95a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
95b0: 64 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72  de n = SQLiteErr
95c0: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a  orCode.Schema;..
95d0: 20 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65        int retrie
95e0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  s = 0;..      in
95f0: 74 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73  t maximumRetries
9600: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
9610: 20 3f 20 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52   ? cnn._prepareR
9620: 65 74 72 69 65 73 20 3a 20 53 51 4c 69 74 65 43  etries : SQLiteC
9630: 6f 6e 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c  onnection.Defaul
9640: 74 50 72 65 70 61 72 65 52 65 74 72 69 65 73 3b  tPrepareRetries;
9650: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
9660: 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c   = ToUTF8(strSql
9670: 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  );..      string
9680: 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c   typedefs = null
9690: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ;..      SQLiteS
96a0: 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e  tatement cmd = n
96b0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  ull;..      Rand
96c0: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
96d0: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
96e0: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
96f0: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
9700: 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73  nt;....      Res
9710: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b  etCancelCount();
9720: 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64  ....      GCHand
9730: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61  le handle = GCHa
9740: 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43  ndle.Alloc(b, GC
9750: 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65  HandleType.Pinne
9760: 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  d);..      IntPt
9770: 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e  r psql = handle.
9780: 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65  AddrOfPinnedObje
9790: 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c  ct();..      SQL
97a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
97b0: 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  le statementHand
97c0: 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  le = null;..    
97d0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a    try..      {..
97e0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28          while ((
97f0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
9800: 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e  Code.Schema || n
9810: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9820: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
9830: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9840: 64 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72  de.Busy) && retr
9850: 69 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74  ies < maximumRet
9860: 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  ries)..        {
9870: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d  ..          try.
9880: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
9890: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
98a0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
98b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
98c0: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
98d0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
98e0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
98f0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
9900: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
9910: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
9920: 20 20 20 20 20 20 20 20 20 20 20 70 74 72 20 3d             ptr =
9930: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
9940: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
9950: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
9960: 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20     len = 0;..   
9970: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
9980: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9990: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
99a0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
99b0: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
99c0: 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66  1, ref stmt, ref
99d0: 20 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d   ptr, ref len);.
99e0: 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f  .#else..#if USE_
99f0: 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20  PREPARE_V2..    
9a00: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
9a10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9a20: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
9a30: 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  v2(_sql, psql, b
9a40: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66  .Length - 1, ref
9a50: 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b   stmt, ref ptr);
9a60: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
9a70: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
9a80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9a90: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
9aa0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
9ab0: 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c  h - 1, ref stmt,
9ac0: 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64   ref ptr);..#end
9ad0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
9ae0: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
9af0: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
9b00: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
9b10: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
9b20: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
9b30: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
9b40: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
9b50: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
9b60: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
9b70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
9b80: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
9b90: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
9ba0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
9bb0: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
9bc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9bd0: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
9be0: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
9bf0: 29 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  ) statementHandl
9c00: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
9c20: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65  ementHandle = ne
9c30: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
9c40: 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74  tHandle(_sql, st
9c50: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mt);..          
9c60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
9c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
9c80: 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c   (statementHandl
9c90: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
9ca0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9cb0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
9cc0: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
9cd0: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
9ce0: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
9d00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
9d10: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
9d20: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
9d30: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
9d40: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
9d50: 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  , statementHandl
9d60: 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f  e, strSql, new o
9d70: 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20  bject[] {..     
9d80: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
9d90: 53 51 4c 69 74 65 33 29 2c 20 63 6e 6e 2c 20 73  SQLite3), cnn, s
9da0: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
9db0: 20 74 69 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d   timeoutMS }));.
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
9dd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 68            if (Sh
9de0: 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63  ouldThrowForCanc
9df0: 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  el())..         
9e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9e10: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
9e20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
9e30: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
9e40: 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69        (n == SQLi
9e50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
9e60: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
9e70: 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c         (n == SQL
9e80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
9e90: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
9ea0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9eb0: 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69          n = SQLi
9ec0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65  teErrorCode.Inte
9ed0: 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20  rrupt;..        
9ee0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9ef0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
9f00: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9f10: 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  on(n, null);..  
9f20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9f30: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
9f40: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9f50: 49 6e 74 65 72 72 75 70 74 29 0d 0a 20 20 20 20  Interrupt)..    
9f60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
9f70: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
9f80: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
9f90: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d  rorCode.Schema).
9fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9fb0: 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ries++;..       
9fc0: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
9fd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9fe0: 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20  .Error)..       
9ff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a000: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
a010: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
a020: 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50  r(), "near \"TYP
a030: 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72  ES\": syntax err
a040: 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  or", StringCompa
a050: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
a060: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
a070: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
a090: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e   pos = strSql.In
a0a0: 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20  dexOf(';');..   
a0b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
a0c0: 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20  os == -1) pos = 
a0d0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
a0e0: 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  1;....          
a0f0: 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73      typedefs = s
a100: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
a110: 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20  0, pos + 1);..  
a120: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
a130: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  ql = strSql.Subs
a140: 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d  tring(pos + 1);.
a150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a160: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
a170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a180: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
a190: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
a1a0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
a1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
a1d0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
a1e0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
a1f0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
a200: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a220: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
a230: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a240: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a250: 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e      if (cmd != n
a260: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a270: 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70        cmd.SetTyp
a280: 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d  es(typedefs);...
a290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
a2a0: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
a2b0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28          }..#if (
a2c0: 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30  NET_35 || NET_40
a2d0: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
a2e0: 54 5f 34 35 31 29 20 26 26 20 21 50 4c 41 54 46  T_451) && !PLATF
a2f0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a300: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
a310: 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c    else if (_buil
a320: 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61  dingSchema == fa
a330: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f  lse && String.Co
a340: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
a350: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
a360: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
a370: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
a380: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
a390: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
a3a0: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
a3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a3c0: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
a3d0: 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  = "";..         
a3e0: 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63       _buildingSc
a3f0: 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20  hema = true;..  
a400: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
a410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
a420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a430: 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45    ISQLiteSchemaE
a440: 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20  xtensions ext = 
a450: 28 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64  ((IServiceProvid
a460: 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79  er)SQLiteFactory
a470: 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65  .Instance).GetSe
a480: 72 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51  rvice(typeof(ISQ
a490: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
a4a0: 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74  ions)) as ISQLit
a4b0: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
a4c0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  s;....          
a4d0: 20 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d        if (ext !=
a4e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a4f0: 20 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75            ext.Bu
a500: 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e  ildTempSchema(cn
a510: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
a520: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
a530: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
a540: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
a550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a560: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a570: 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70        cmd = Prep
a580: 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c  are(cnn, strSql,
a590: 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f   previous, timeo
a5a0: 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d  utMS, ref strRem
a5b0: 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ain);..         
a5c0: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
a5d0: 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20  = strRemain;..  
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a5f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a600: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
a630: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
a640: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a650: 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69           _buildi
a660: 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65  ngSchema = false
a670: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a680: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a690: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
a6a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a6b0: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
a6c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a6d0: 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53  Locked || n == S
a6e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
a6f0: 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d  usy) // Locked -
a700: 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20  - delay a small 
a710: 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65  amount before re
a720: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
a730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a740: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
a750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a760: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
a770: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
a780: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
a790: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
a7a0: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
a7b0: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
a7c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
a7d0: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
a7e0: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
a7f0: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
a800: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
a810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a820: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
a830: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
a840: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
a850: 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20  utMS)..         
a860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a870: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
a880: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
a890: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
a8a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
a8c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
a8d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a8e0: 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c   // Otherwise sl
a8f0: 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d  eep for a random
a900: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
a910: 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20  up to 150ms..   
a920: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
a930: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65  m.Threading.Thre
a940: 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78  ad.Sleep(rnd.Nex
a950: 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20  t(1, 150));..   
a960: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a970: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a980: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
a990: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
a9a0: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
a9b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a9c0: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
a9d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
a9e0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
a9f0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
aa00: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
aa10: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
aa20: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
aa30: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
aa40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
aa70: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a  ode.Interrupt;..
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
aa90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
aaa0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
aab0: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
aac0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
aad0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
aae0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
aaf0: 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72  Interrupt) retur
ab00: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
ab10: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
ab20: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
ab30: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ab40: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
ab50: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
ab60: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
ab70: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
ab80: 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20  ptr, len);....  
ab90: 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d        if (statem
aba0: 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c  entHandle != nul
abb0: 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c  l) cmd = new SQL
abc0: 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69  iteStatement(thi
abd0: 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74 65 6d  s, flags, statem
abe0: 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71  entHandle, strSq
abf0: 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73  l.Substring(0, s
ac00: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73  trSql.Length - s
ac10: 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29  trRemain.Length)
ac20: 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a  , previous);....
ac30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
ac40: 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  md;..      }..  
ac50: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
ac60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61     {..        ha
ac70: 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20  ndle.Free();..  
ac80: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
ac90: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
aca0: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
acb0: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
acc0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
acd0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
ace0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
acf0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
ad00: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
ad10: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
ad20: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
ad30: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
ad40: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
ad50: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
ad60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
ad70: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
ad80: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
ad90: 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d  1} as NULL...",.
ada0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
adb0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
adc0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
add0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
ade0: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
adf0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
ae00: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
ae10: 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79  t index, ValueTy
ae20: 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  pe value)..    {
ae30: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
ae40: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
ae50: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
ae60: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
ae70: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
ae80: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
ae90: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
aea0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
aeb0: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
aec0: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
aed0: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
aee0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
aef0: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 76  IntPtr, index, v
af00: 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c 20  alue.GetType(), 
af10: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  value));..    }.
af20: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
af30: 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72  tatic string For
af40: 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74 65  matDateTime(Date
af50: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
af60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69   {..        Stri
af70: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
af80: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
af90: 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lder();....     
afa0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
afb0: 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  (value.ToString(
afc0: 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  "yyyy-MM-ddTHH:m
afd0: 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29 29  m:ss.FFFFFFFK"))
afe0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
aff0: 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a  t.Append(' ');..
b000: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
b010: 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64  ppend(value.Kind
b020: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
b030: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
b040: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
b050: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69 63  Append(value.Tic
b060: 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ks);....        
b070: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
b080: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
b090: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
b0a0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
b0b0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
b0c0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
b0d0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44  le, int index, D
b0e0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
b0f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
b100: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
b110: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
b120: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
b130: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
b140: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
b150: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
b160: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
b170: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
b180: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
b190: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
b1a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
b1b0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
b1c0: 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54  ex, typeof(DateT
b1d0: 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65  ime), FormatDate
b1e0: 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a  Time(value)));..
b1f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
b200: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
b210: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
b220: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
b230: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
b240: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
b250: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b260: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
b270: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
b280: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
b290: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
b2a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
b2c0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
b2d0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
b2e0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
b2f0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
b300: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
b310: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
b320: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 53 74  index, typeof(St
b330: 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20 21 3d  ring), (value !=
b340: 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20 3a   null) ? value :
b350: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
b360: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
b370: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
b380: 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74   ToHexadecimalSt
b390: 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 62  ring(..        b
b3a0: 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20  yte[] array..   
b3b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
b3c0: 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61 79         if (array
b3d0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
b3e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
b3f0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ll;....        S
b400: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
b410: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
b420: 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e 4c 65  Builder(array.Le
b430: 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20  ngth * 2);....  
b440: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
b450: 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b   = array.Length;
b460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
b470: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
b480: 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
b490: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
b4a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
b4b0: 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65 78 5d  end(array[index]
b4c0: 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22 29 29  .ToString("x2"))
b4d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
b4e0: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
b4f0: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
b500: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
b510: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
b520: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
b530: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
b540: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
b550: 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
b560: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
b570: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
b580: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
b590: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
b5a0: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
b5b0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
b5c0: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
b5d0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
b5e0: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
b5f0: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
b600: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
b610: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
b620: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74  IntPtr, index, t
b630: 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28  ypeof(Byte[]), (
b640: 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  value != null) ?
b650: 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74   ToHexadecimalSt
b660: 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c  ring(value) : "<
b670: 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d  null>"));..    }
b680: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b690: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
b6a0: 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74  ind_Double(SQLit
b6b0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b6c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b6d0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
b6e0: 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20  t index, double 
b6f0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
b700: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
b710: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
b720: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
b730: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
b740: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
b750: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b760: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
b770: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
b780: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
b790: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b7a0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
b7b0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
b7c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
b7d0: 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54    }....#if !PLAT
b7e0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
b7f0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53  EWORK..        S
b800: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
b810: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b820: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
b830: 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c  ind_double(handl
b840: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
b850: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
b860: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
b870: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
b880: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
b890: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b8a0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
b8b0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
b8c0: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
b8d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
b8e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
b8f0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
b900: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
b910: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
b920: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b930: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
b940: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
b950: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
b960: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b970: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b980: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
b990: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
b9a0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
b9b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
b9c0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
b9d0: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
b9e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
b9f0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ba00: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
ba10: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
ba20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
ba30: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ba40: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ba50: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ba60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
ba70: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
ba80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
ba90: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
baa0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
bab0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
bac0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
bad0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
bae0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
baf0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
bb00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
bb10: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
bb20: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
bb30: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
bb40: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
bb50: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
bb60: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
bb70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bb80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
bb90: 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  d_UInt32(SQLiteS
bba0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
bbb0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bbc0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
bbd0: 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75  index, uint valu
bbe0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
bbf0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
bc00: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
bc10: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
bc20: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
bc30: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
bc40: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
bc50: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
bc60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
bc70: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
bc80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bc90: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
bca0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bcb0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
bcc0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
bcd0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
bce0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
bcf0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
bd00: 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de n;....       
bd10: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
bd20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
bd30: 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73  ags.BindUInt32As
bd40: 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69 74 65  Int64) == SQLite
bd50: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
bd60: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
bd70: 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  4)..        {.. 
bd80: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
bd90: 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d  value2 = value;.
bda0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
bdb0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
bdc0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  K..            n
bdd0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
bde0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
bdf0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
be00: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29  , index, value2)
be10: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
be20: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
be30: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
be40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
be50: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
be60: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
be70: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
be80: 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue2);..#else..  
be90: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
bea0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
beb0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
bec0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
bed0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
bee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
bef0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
bf00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bf10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
bf20: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
bf30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
bf40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
bf50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
bf60: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
bf70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
bf80: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
bf90: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
bfa0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bfb0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
bfc0: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
bfd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
bfe0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
bff0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
c000: 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  ndex, long value
c010: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c020: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
c030: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
c040: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
c050: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
c060: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
c070: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
c080: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
c090: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
c0a0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
c0b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
c0c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
c0d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c0e0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
c0f0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
c100: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
c110: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c120: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
c130: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c140: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
c150: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
c160: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
c170: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
c180: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
c190: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
c1a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c1b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
c1c0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
c1d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
c1e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
c1f0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
c200: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
c210: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
c220: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
c230: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
c240: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
c250: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c260: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c270: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c280: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c290: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c2a0: 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c   Bind_UInt64(SQL
c2b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
c2c0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
c2d0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
c2e0: 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67  int index, ulong
c2f0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
c300: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
c310: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
c320: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
c330: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
c340: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
c350: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
c360: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
c370: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
c380: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
c390: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
c3a0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
c3b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
c3c0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
c3d0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
c3e0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
c3f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c400: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c410: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
c420: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c430: 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61 6e 64  bind_uint64(hand
c440: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
c450: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
c460: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
c470: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c480: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
c490: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c4a0: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f  te3_bind_uint64_
c4b0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
c4c0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
c4d0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
c4e0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
c4f0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
c500: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
c510: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
c520: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c530: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c540: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c550: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c560: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
c570: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
c580: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54 65  ide void Bind_Te
c590: 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  xt(SQLiteStateme
c5a0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
c5b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
c5c0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
c5d0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
c5e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
c5f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
c600: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
c610: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
c620: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
c630: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
c640: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
c650: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
c660: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
c670: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
c680: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c690: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
c6a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c6b0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
c6c0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
c6d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
c6e0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62  dif....        b
c6f0: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
c700: 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66 20  (value);....#if 
c710: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
c720: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
c730: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
c740: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c750: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
c760: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
c770: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c780: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c790: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
c7a0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
c7b0: 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d   b);..        }.
c7c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
c7d0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c7e0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
c7f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c800: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e  e3_bind_text(han
c810: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62  dle, index, b, b
c820: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
c830: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
c840: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
c850: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
c860: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
c870: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
c880: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
c890: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c8a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c8b0: 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69  void Bind_DateTi
c8c0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
c8d0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
c8e0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
c8f0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
c900: 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a 20   DateTime dt).. 
c910: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
c920: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c930: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
c940: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
c950: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
c960: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c970: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
c980: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c990: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c9a0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c9b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c9c0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c9d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c9e0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c9f0: 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20   index, dt);..  
ca00: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
ca10: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
ca20: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
ca30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69  nnectionFlags.Bi
ca40: 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69  ndDateTimeWithKi
ca50: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
ca60: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
ca70: 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e  dDateTimeWithKin
ca80: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
ca90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
caa0: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d  _datetimeKind !=
cab0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e   DateTimeKind.Un
cac0: 73 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a 20  specified) &&.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
cae0: 64 74 2e 4b 69 6e 64 20 21 3d 20 44 61 74 65 54  dt.Kind != DateT
caf0: 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66  imeKind.Unspecif
cb00: 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ied) &&..       
cb10: 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e           (dt.Kin
cb20: 64 20 21 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69  d != _datetimeKi
cb30: 6e 64 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nd))..          
cb40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cb50: 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
cb60: 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69  meKind == DateTi
cb70: 6d 65 4b 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20  meKind.Utc)..   
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb90: 20 64 74 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65   dt = dt.ToUnive
cba0: 72 73 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20  rsalTime();..   
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
cbc0: 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b  e if (_datetimeK
cbd0: 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b  ind == DateTimeK
cbe0: 69 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20  ind.Local)..    
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 64 74 20 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54  dt = dt.ToLocalT
cc10: 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ime();..        
cc20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
cc30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
cc40: 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  ch (_datetimeFor
cc50: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
cc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
cc70: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
cc80: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccb0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
ccc0: 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66  dt.Ticks;....#if
ccd0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
cce0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
cd10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
cd20: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
cd30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cd40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
cd80: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
cd90: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
cdd0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
cde0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cdf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
ce00: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
ce10: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
ce20: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
ce30: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
ce40: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ce50: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ce60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ce70: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ce80: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
ce90: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
cea0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
ceb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cec0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
ced0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
cee0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
cef0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
cf00: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
cf10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
cf20: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
cf30: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
cf40: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
cf50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
cf60: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cf80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
cf90: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
cfa0: 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d  mats.JulianDay:.
cfb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cfc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cfd0: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
cfe0: 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44  alue = ToJulianD
cff0: 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  ay(dt);....#if !
d000: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
d010: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d030: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
d040: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d050: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
d060: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d070: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
d0b0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
d0c0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d0f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d100: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
d110: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d120: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
d130: 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e  ouble(handle, in
d140: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
d150: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d160: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
d170: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d180: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
d190: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d1a0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
d1b0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
d1c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
d1d0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
d1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d1f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d200: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d210: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d220: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
d230: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d240: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d250: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d260: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d270: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d280: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d290: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
d2c0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
d2d0: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
d2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d300: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
d310: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
d320: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
d330: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
d340: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69  lSeconds);....#i
d350: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d360: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
d390: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d3a0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
d3b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d3c0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
d3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
d410: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d430: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
d450: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d460: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d470: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d480: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
d490: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d4a0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
d4b0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
d4d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d4e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d4f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d500: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
d510: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
d520: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
d530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d540: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d550: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
d560: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
d570: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
d580: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d590: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d5a0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d5b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d5c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d5d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d5e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  }..            d
d610: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
d620: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d640: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
d650: 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  8(dt);....#if !P
d660: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d670: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d690: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
d6a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d6b0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
d6c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d6d0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d700: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
d710: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
d720: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
d730: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
d740: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
d760: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d770: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d780: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d790: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
d7a0: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
d7b0: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
d7c0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  -1));..         
d7d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
d7e0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
d7f0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
d800: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
d810: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
d820: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
d830: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
d840: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d850: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
d860: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d870: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d880: 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53  void Bind_Blob(S
d890: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d8a0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
d8b0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
d8c0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
d8d0: 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20  e[] blobData).. 
d8e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
d8f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
d900: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
d910: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
d920: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
d930: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
d940: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
d950: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
d960: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d970: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
d980: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d990: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
d9a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d9b0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d9c0: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
d9d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
d9e0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
d9f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
da00: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
da10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
da20: 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c  _bind_blob(handl
da30: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
da40: 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e  ta, blobData.Len
da50: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
da60: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ));..        if 
da70: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
da80: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
da90: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
daa0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
dab0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
dac0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dad0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
dae0: 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  d_Null(SQLiteSta
daf0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
db00: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
db10: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
db20: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
db30: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
db40: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
db50: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
db60: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
db70: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
db80: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
db90: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
dba0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dbb0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
dbc0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dbd0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
dbe0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dbf0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
dc00: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d  handle, index);.
dc10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
dc20: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
dc30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
dc40: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
dc50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
dc60: 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20  nd_null(handle, 
dc70: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
dc80: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
dc90: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
dca0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
dcb0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
dcc0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
dcd0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
dce0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
dcf0: 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28  Bind_ParamCount(
dd00: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
dd10: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
dd20: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
dd30: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
dd40: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
dd50: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
dd60: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
dd70: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  tmt;..        in
dd80: 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65  t value = Unsafe
dd90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dda0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
ddb0: 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c  eter_count(handl
ddc0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
ddd0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
dde0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ddf0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
de00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
de10: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
de20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
de30: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
de40: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
de50: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
de60: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
de70: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
de80: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
de90: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
dea0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
deb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dec0: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
ded0: 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e  0} paramter coun
dee0: 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  t is {1}.",..   
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
df00: 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65  dleIntPtr, value
df10: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
df20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
df30: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
df40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
df50: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42  verride string B
df60: 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51  ind_ParamName(SQ
df70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
df80: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
df90: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
dfa0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
dfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
dfc0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
dfd0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
dfe0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
dff0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
e000: 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  me;....#if !SQLI
e010: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e020: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
e030: 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  ;..        name 
e040: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
e050: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e060: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
e070: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69  parameter_name_i
e080: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
e090: 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
e0a0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
e0b0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
e0c0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
e0d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e0e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
e0f0: 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65  eter_name(handle
e100: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
e110: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
e120: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
e130: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e140: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
e150: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e160: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
e170: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e180: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
e190: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
e1a0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
e1b0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
e1c0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
e1d0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
e1e0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
e1f0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
e200: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
e210: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
e220: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
e230: 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32  {1} name is {{{2
e240: 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }}}.",..        
e250: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
e260: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d  tPtr, index, nam
e270: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
e280: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
e290: 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a  n name;..    }..
e2a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e2b0: 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64  verride int Bind
e2c0: 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69  _ParamIndex(SQLi
e2d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
e2e0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
e2f0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73  onFlags flags, s
e300: 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29  tring paramName)
e310: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e320: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
e330: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
e340: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e350: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
e360: 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61  index = UnsafeNa
e370: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e380: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
e390: 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c  er_index(handle,
e3a0: 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d   ToUTF8(paramNam
e3b0: 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
e3c0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
e3d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e3e0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
e3f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e400: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
e410: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e420: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
e430: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
e440: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
e450: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
e460: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
e470: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
e480: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
e490: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
e4a0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
e4b0: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
e4c0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64  {0} paramter ind
e4d0: 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d  ex of name {{{1}
e4e0: 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20  }} is #{2}.",.. 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
e500: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72  andleIntPtr, par
e510: 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b  amName, index));
e520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
e530: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e         return in
e540: 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  dex;..    }.... 
e550: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e560: 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43  ride int ColumnC
e570: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
e580: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
e590: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
e5a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e5b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
e5c0: 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73  mn_count(stmt._s
e5d0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20  qlite_stmt);..  
e5e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e5f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
e600: 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53  ing ColumnName(S
e610: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
e620: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
e630: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
e640: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e650: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
e660: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
e670: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e680: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e690: 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  olumn_name_inter
e6a0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
e6b0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
e6c0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
e6d0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
e6e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e6f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
e700: 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  mn_name(stmt._sq
e710: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
e720: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
e730: 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50 74    if (p == IntPt
e740: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
e750: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e760: 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74  eException(SQLit
e770: 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d  eErrorCode.NoMem
e780: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e790: 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  );..#if !SQLITE_
e7a0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
e7b0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
e7c0: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65  ing(p, len);..#e
e7d0: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
e7e0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
e7f0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
e800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e810: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
e820: 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75  ypeAffinity Colu
e830: 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74  mnAffinity(SQLit
e840: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
e850: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
e860: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
e870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
e890: 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73  umn_type(stmt._s
e8a0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
e8b0: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
e8c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e8d0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
e8e0: 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74  nType(SQLiteStat
e8f0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
e900: 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70 65 41  index, ref TypeA
e910: 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74  ffinity nAffinit
e920: 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  y)..    {..     
e930: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21   int len;..#if !
e940: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
e950: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d  .      len = 0;.
e960: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
e970: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e980: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
e990: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e  lumn_decltype_in
e9a0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
e9b0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
e9c0: 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
e9d0: 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31  ..      len = -1
e9e0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
e9f0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
ea00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ea10: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
ea20: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ea30: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64  t, index);..#end
ea40: 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e  if..      nAffin
ea50: 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69  ity = ColumnAffi
ea60: 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
ea70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
ea80: 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p != IntPtr.Zero
ea90: 29 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53  ) return UTF8ToS
eaa0: 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
eab0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
eac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72    {..        str
ead0: 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e  ing[] ar = stmt.
eae0: 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b  TypeDefinitions;
eaf0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
eb00: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
eb10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eb20: 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c  if (index < ar.L
eb30: 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65  ength && ar[inde
eb40: 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  x] != null)..   
eb50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
eb60: 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  ar[index];..    
eb70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72      }..        r
eb80: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70  eturn String.Emp
eb90: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ty;....        /
eba0: 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69  /switch (nAffini
ebb0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b  ty)..        //{
ebc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
ebd0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
ebe0: 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
ebf0: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 49  //    return "BI
ec00: 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  GINT";..        
ec10: 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66  //  case TypeAff
ec20: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
ec30: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
ec40: 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20  urn "DOUBLE";.. 
ec50: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
ec60: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
ec70: 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  b:..        //  
ec80: 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b    return "BLOB";
ec90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65  ..        //  de
eca0: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
ecb0: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54 45  //    return "TE
ecc0: 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  XT";..        //
ecd0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
ece0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ecf0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
ed00: 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74  olumnIndex(SQLit
ed10: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
ed20: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
ed30: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
ed40: 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e    int x = Column
ed50: 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Count(stmt);....
ed60: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
ed70: 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b   = 0; n < x; n++
ed80: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
ed90: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
eda0: 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d  ompare(columnNam
edb0: 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74  e, ColumnName(st
edc0: 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f  mt, n), StringCo
edd0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
ede0: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
edf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
ee00: 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn n;..      }.
ee10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
ee20: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ee30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ee40: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f  e string ColumnO
ee50: 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69  riginalName(SQLi
ee60: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ee70: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ee80: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
ee90: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
eea0: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
eeb0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
eec0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
eed0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
eee0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
eef0: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
ef00: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ef10: 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
ef20: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
ef30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
ef40: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
ef50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ef60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
ef70: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
ef80: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
ef90: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
efa0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
efb0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
efc0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
efd0: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
efe0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
eff0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
f000: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
f010: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
f020: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
f030: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
f040: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
f050: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f060: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
f070: 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  abase_name_inter
f080: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
f090: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
f0a0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
f0b0: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
f0c0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
f0d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f0e0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
f0f0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
f100: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f110: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
f120: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
f130: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f140: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
f150: 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53  olumnTableName(S
f160: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f170: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
f180: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
f190: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f1a0: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
f1b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
f1c0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
f1d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f1e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
f1f0: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
f200: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
f210: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
f220: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
f230: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
f240: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
f250: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f260: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f270: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
f280: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
f290: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
f2a0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
f2b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f2c0: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
f2d0: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
f2e0: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
f2f0: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
f300: 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e 67  lumn, ref string
f310: 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 73   dataType, ref s
f320: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
f330: 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20  uence, ref bool 
f340: 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f  notNull, ref boo
f350: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65  l primaryKey, re
f360: 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  f bool autoIncre
f370: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
f380: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
f390: 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e  ypePtr = IntPtr.
f3a0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
f3b0: 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d  Ptr collSeqPtr =
f3c0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
f3d0: 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c       int nnotNul
f3e0: 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  l = 0;..      in
f3f0: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20  t nprimaryKey = 
f400: 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61  0;..      int na
f410: 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  utoInc = 0;..   
f420: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
f430: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
f440: 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
f450: 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
f460: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
f470: 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  D..      dtLen =
f480: 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e   0;..      csLen
f490: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d   = 0;..      n =
f4a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f4b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
f4c0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
f4d0: 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
f4e0: 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
f4f0: 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
f500: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
f510: 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74  , ref dataTypePt
f520: 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74  r, ref collSeqPt
f530: 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, ref nnotNull,
f540: 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79   ref nprimaryKey
f550: 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20  , ref nautoInc, 
f560: 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63  ref dtLen, ref c
f570: 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
f580: 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
f590: 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
f5a0: 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
f5b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f5c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
f5d0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
f5e0: 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
f5f0: 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
f600: 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
f610: 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61  (column), ref da
f620: 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63  taTypePtr, ref c
f630: 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e  ollSeqPtr, ref n
f640: 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72  notNull, ref npr
f650: 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61  imaryKey, ref na
f660: 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
f670: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
f680: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f690: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f6a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f6b0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f6c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61  );....      data
f6d0: 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
f6e0: 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c  ing(dataTypePtr,
f6f0: 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20   dtLen);..      
f700: 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20  collateSequence 
f710: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
f720: 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e  ollSeqPtr, csLen
f730: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e  );....      notN
f740: 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20  ull = (nnotNull 
f750: 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72  == 1);..      pr
f760: 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69  imaryKey = (npri
f770: 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a  maryKey == 1);..
f780: 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d        autoIncrem
f790: 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20  ent = (nautoInc 
f7a0: 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  == 1);..    }...
f7b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f7c0: 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
f7d0: 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  tDouble(SQLiteSt
f7e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
f7f0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
f800: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61  .      double va
f810: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
f820: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
f830: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
f840: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
f850: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f860: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74  column_double(st
f870: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
f880: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20   index);..#elif 
f890: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
f8a0: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
f8b0: 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  0.0;..      Unsa
f8c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f8d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
f8e0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74  ouble_interop(st
f8f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
f900: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
f910: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
f920: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
f930: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
f940: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
f950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
f960: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
f970: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f980: 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79  ide sbyte GetSBy
f990: 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
f9a0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
f9b0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f9c0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
f9d0: 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e  ed((sbyte)(GetIn
f9e0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
f9f0: 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
fa00: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
fa10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fa20: 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65  ide byte GetByte
fa30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fa40: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
fa50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fa60: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
fa70: 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  ((byte)(GetInt32
fa80: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
fa90: 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
faa0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
fab0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fac0: 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28   short GetInt16(
fad0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
fae0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
faf0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
fb00: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
fb10: 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  (short)(GetInt32
fb20: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
fb30: 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
fb40: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
fb50: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
fb60: 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e  de ushort GetUIn
fb70: 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
fb80: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
fb90: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
fba0: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
fbb0: 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74  ked((ushort)(Get
fbc0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
fbd0: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
fbe0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
fbf0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fc00: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
fc10: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
fc20: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
fc30: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
fc40: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
fc50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fc60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
fc70: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
fc80: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
fc90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
fca0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e  nal override uin
fcb0: 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69  t GetUInt32(SQLi
fcc0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
fcd0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
fce0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
fcf0: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e  n unchecked((uin
fd00: 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  t)GetInt32(stmt,
fd10: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
fd20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fd30: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
fd40: 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
fd50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
fd60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
fd70: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
fd80: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
fd90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
fda0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
fdb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
fdc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
fdd0: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
fde0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
fdf0: 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
fe00: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
fe10: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30 3b 0d       value = 0;.
fe20: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
fe30: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fe40: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
fe50: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
fe60: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
fe70: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
fe80: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
fe90: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
fea0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
feb0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
fec0: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
fed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
fee0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c  rnal override ul
fef0: 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53 51  ong GetUInt64(SQ
ff00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
ff10: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
ff20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
ff30: 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
ff40: 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74  long)GetInt64(st
ff50: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
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 47 65 74 54 65 78 74 28 53 51 4c 69  ing GetText(SQLi
ff90: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ffa0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ffb0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
ffc0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ffd0: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
ffe0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
fff0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
10000 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10010 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
10020 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10030 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10040 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
10050 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10060 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
10070 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
10080 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10090 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
100a0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
100b0 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
100c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
100d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
100e0 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
100f0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10100 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
10110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10120 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
10130 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
10140 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10150 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10160 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
10170 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46    if (_datetimeF
10180 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
10190 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
101a0 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
101b0 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  n ToDateTime(Get
101c0 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
101d0 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
101e0 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
101f0 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
10200 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
10210 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
10220 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ay)..        ret
10230 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
10240 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
10250 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
10260 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
10270 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
10280 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
10290 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
102a0 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20  Epoch)..        
102b0 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
102c0 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  e(GetInt32(stmt,
102d0 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
102e0 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20  meKind);....#if 
102f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10300 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10310 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10320 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
10330 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10340 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10350 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
10360 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10370 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
10380 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
10390 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
103a0 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
103b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
103c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
103d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
103e0 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
103f0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
10400 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10410 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
10420 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10430 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
10440 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10450 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10460 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53   long GetBytes(S
10470 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10480 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
10490 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
104a0 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
104b0 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
104c0 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
104d0 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
104e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
104f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10500 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
10510 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10520 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ex);....      //
10530 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69   If no destinati
10540 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72  on buffer, retur
10550 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65  n the size neede
10560 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  d...      if (bD
10570 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
10580 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
10590 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
105a0 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
105b0 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
105c0 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
105d0 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
105e0 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
105f0 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
10600 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
10610 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
10620 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
10630 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
10640 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
10650 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
10660 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
10670 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e  tr ptr = UnsafeN
10680 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10690 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
106a0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
106b0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
106c0 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
106d0 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
106e0 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
106f0 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
10700 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
10710 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
10720 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
10730 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
10740 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
10750 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
10760 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
10770 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10780 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
10790 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74  etChars(SQLiteSt
107a0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
107b0 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
107c0 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  taOffset, char[]
107d0 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
107e0 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
107f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
10800 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  nt nlen;..      
10810 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
10820 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
10830 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74  string str = Get
10840 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
10850 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d  );..      nlen =
10860 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a   str.Length;....
10870 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
10880 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
10890 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
108a0 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
108b0 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
108c0 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
108d0 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
108e0 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
108f0 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
10900 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
10910 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
10920 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
10930 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
10940 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73   > 0)..        s
10950 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f  tr.CopyTo(nDataO
10960 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53  ffset, bDest, nS
10970 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
10980 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70  .      else nCop
10990 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ied = 0;....    
109a0 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
109b0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
109c0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
109d0 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51  e bool IsNull(SQ
109e0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
109f0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
10a00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
10a10 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e  urn (ColumnAffin
10a20 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
10a30 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
10a40 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Null);..    }..
10a50 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10a60 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72  verride int Aggr
10a70 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74  egateCount(IntPt
10a80 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
10a90 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
10aa0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10ab0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
10ac0 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74  egate_count(cont
10ad0 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
10ae0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10af0 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
10b00 72 43 6f 64 65 20 43 72 65 61 74 65 46 75 6e 63  rCode CreateFunc
10b10 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46  tion(string strF
10b20 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72  unction, int nAr
10b30 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c  gs, bool needCol
10b40 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c  lSeq, SQLiteCall
10b50 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74  back func, SQLit
10b60 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74  eCallback funcst
10b70 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43  ep, SQLiteFinalC
10b80 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61  allback funcfina
10b90 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  l, bool canThrow
10ba0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10bb0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10bc0 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
10bd0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
10be0 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
10bf0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10c00 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
10c10 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
10c20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
10c30 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
10c40 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
10c50 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
10c60 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
10c70 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
10c80 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66   : 0);..      if
10c90 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
10ca0 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
10cb0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10cc0 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
10cd0 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
10ce0 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
10cf0 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
10d00 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
10d10 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
10d20 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
10d30 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
10d40 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
10d50 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
10d60 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10d70 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
10d80 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73  eate_function(_s
10d90 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
10da0 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
10db0 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
10dc0 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
10dd0 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20  funcfinal);..   
10de0 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
10df0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
10e00 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
10e10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10e20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
10e30 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
10e40 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
10e50 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
10e60 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
10e70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23  , funcfinal);..#
10e80 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
10e90 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20  (canThrow && (n 
10ea0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10eb0 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65  de.Ok)) throw ne
10ec0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
10ed0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
10ee0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  r());..      ret
10ef0 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  urn n;..    }...
10f00 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10f10 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
10f20 6f 72 43 6f 64 65 20 43 72 65 61 74 65 43 6f 6c  orCode CreateCol
10f30 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
10f40 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
10f50 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
10f60 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
10f70 6e 20 66 75 6e 63 31 36 2c 20 62 6f 6f 6c 20 63  n func16, bool c
10f80 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
10f90 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
10fa0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
10fb0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10fc0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
10fd0 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
10fe0 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
10ff0 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 2, IntPtr.Ze
11000 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ro, func16);..  
11010 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
11020 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11030 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
11040 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11050 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
11060 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
11070 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c  trCollation), 1,
11080 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
11090 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  nc);..      if (
110a0 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21  canThrow && (n !
110b0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
110c0 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77  e.Ok)) throw new
110d0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
110e0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
110f0 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ());..      retu
11100 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  rn n;..    }....
11110 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11120 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
11130 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
11140 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
11150 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
11160 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
11170 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29  g s1, string s2)
11180 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
11190 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
111a0 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
111b0 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
111c0 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
111d0 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
111e0 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
111f0 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
11200 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
11210 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
11220 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
11230 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
11240 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
11250 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
11260 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
11270 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
11280 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
11290 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
112a0 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
112b0 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
112c0 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
112d0 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
112e0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
112f0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
11300 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
11310 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
11320 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
11330 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
11340 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
11350 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
11360 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
11370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11380 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
11390 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20  etBytes(s1);..  
113a0 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
113b0 65 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b  er.GetBytes(s2);
113c0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
113d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
113e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
113f0 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
11400 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
11410 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
11420 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
11430 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
11440 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
11450 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
11460 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
11470 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11480 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
11490 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
114a0 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
114b0 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
114c0 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
114d0 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72   char[] c1, char
114e0 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  [] c2)..    {..#
114f0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
11500 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
11510 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
11520 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
11530 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
11540 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
11550 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
11560 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
11570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
11580 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
11590 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
115a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
115b0 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
115c0 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
115d0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
115e0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
115f0 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
11600 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
11610 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
11620 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
11630 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
11640 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
11650 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
11660 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
11670 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
11680 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
11690 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
116a0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
116b0 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
116c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
116d0 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
116e0 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
116f0 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31  rter.GetBytes(c1
11700 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
11710 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
11720 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(c2);....      
11730 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
11740 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11750 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
11760 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63  ompare_interop(c
11770 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c  ontext, b1, b1.L
11780 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65  ength, b2, b2.Le
11790 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ngth);..#else.. 
117a0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
117b0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
117c0 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
117d0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
117e0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
117f0 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  e CollationSeque
11800 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e  nce GetCollation
11810 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46  Sequence(SQLiteF
11820 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e  unction func, In
11830 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
11840 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
11850 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11860 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    CollationSeque
11870 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f  nce seq = new Co
11880 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
11890 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  );..      int le
118a0 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  n = 0;..      in
118b0 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20  t type = 0;..   
118c0 20 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d     int enc = 0;.
118d0 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
118e0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
118f0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11900 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e  ntext_collseq_in
11910 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
11920 65 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e 63  ef type, ref enc
11930 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  , ref len);.... 
11940 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75       if (p != nu
11950 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55  ll) seq.Name = U
11960 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c  TF8ToString(p, l
11970 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  en);..      seq.
11980 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  Type = (Collatio
11990 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d  nTypeEnum)type;.
119a0 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63  .      seq._func
119b0 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20   = func;..      
119c0 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28  seq.Encoding = (
119d0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
119e0 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20  gEnum)enc;....  
119f0 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d      return seq;.
11a00 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
11a10 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
11a20 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
11a30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
11a40 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11a50 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
11a60 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74  GetParamValueByt
11a70 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74  es(IntPtr p, int
11a80 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
11a90 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
11aa0 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
11ab0 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
11ac0 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
11ad0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11ae0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
11af0 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20  bytes(p);....   
11b00 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
11b10 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
11b20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
11b30 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
11b40 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
11b50 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
11b60 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
11b70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
11b80 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
11b90 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
11ba0 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
11bb0 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
11bc0 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
11bd0 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
11be0 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
11bf0 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
11c00 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
11c10 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
11c20 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
11c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11c40 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
11c50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11c60 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
11c70 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  blob(p);....    
11c80 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
11c90 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
11ca0 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
11cb0 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
11cc0 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
11cd0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
11ce0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
11cf0 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
11d00 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
11d10 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
11d20 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
11d30 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11d40 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
11d50 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c  tParamValueDoubl
11d60 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
11d70 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62     {..      doub
11d80 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  le value;..#if !
11d90 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
11da0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
11db0 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
11dc0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11dd0 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
11de0 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  e(ptr);..#elif !
11df0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11e00 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30  .      value = 0
11e10 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  .0;..      Unsaf
11e20 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11e30 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
11e40 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
11e50 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
11e60 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
11e70 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
11e80 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
11e90 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
11ea0 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
11eb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11ec0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
11ed0 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
11ee0 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
11ef0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11f00 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
11f10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11f20 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
11f30 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11f40 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11f50 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
11f60 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
11f70 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
11f80 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d     Int64 value;.
11f90 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
11fa0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
11fb0 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
11fc0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11fd0 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
11fe0 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65  _int64(ptr);..#e
11ff0 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
12000 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75  DARD..      valu
12010 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e  e = 0;..      Un
12020 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12030 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
12040 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74  int64_interop(pt
12050 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  r, ref value);..
12060 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
12070 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
12080 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
12090 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
120a0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
120b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
120c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
120d0 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61  tring GetParamVa
120e0 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70  lueText(IntPtr p
120f0 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  tr)..    {..#if 
12100 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
12110 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
12120 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
12130 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
12140 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12150 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
12160 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70  e_text_interop(p
12170 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  tr, ref len), le
12180 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
12190 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
121a0 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
121b0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
121c0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72  3_value_text(ptr
121d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  ),..        Unsa
121e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
121f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
12200 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64  tes(ptr));..#end
12210 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
12220 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12230 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
12240 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70  GetParamValueTyp
12250 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
12260 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12270 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12280 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
12290 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d  alue_type(ptr);.
122a0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
122b0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
122c0 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28  void ReturnBlob(
122d0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
122e0 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
122f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
12300 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12310 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
12320 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  lob(context, val
12330 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  ue, value.Length
12340 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
12350 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12360 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12370 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62   void ReturnDoub
12380 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  le(IntPtr contex
12390 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  t, double value)
123a0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
123b0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
123c0 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55  AMEWORK..      U
123d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
123e0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
123f0 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74  t_double(context
12400 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
12410 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12420 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
12430 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12440 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
12450 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  le_interop(conte
12460 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
12470 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
12480 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
12490 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
124a0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
124b0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
124c0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
124d0 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50  ReturnError(IntP
124e0 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
124f0 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
12500 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
12510 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12520 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
12530 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38  (context, ToUTF8
12540 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c  (value), value.L
12550 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
12560 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12570 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
12580 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20  urnInt32(IntPtr 
12590 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c  context, int val
125a0 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
125b0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
125c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
125d0 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
125e0 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d  , value);..    }
125f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12600 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
12610 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74  eturnInt64(IntPt
12620 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20  r context, long 
12630 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
12640 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
12650 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
12660 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12670 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12680 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f  _result_int64(co
12690 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
126a0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
126b0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
126c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
126d0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
126e0 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63  _int64_interop(c
126f0 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75  ontext, ref valu
12700 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
12710 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
12720 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
12730 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
12740 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12750 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
12760 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49  oid ReturnNull(I
12770 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
12780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
12790 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
127a0 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
127b0 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  null(context);..
127c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
127d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
127e0 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49  oid ReturnText(I
127f0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
12800 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
12810 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b    {..      byte[
12820 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
12830 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  ue);..      Unsa
12840 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12850 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
12860 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ext(context, ToU
12870 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65  TF8(value), b.Le
12880 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
12890 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d  r)(-1));..    }.
128a0 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
128b0 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
128c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
128d0 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
128e0 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
128f0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
12900 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65   order to create
12910 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20   a disposable.. 
12920 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f     /// module co
12930 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70  ntaining the imp
12940 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
12950 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
12960 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
12970 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
12980 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
12990 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
129a0 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f  module object to
129b0 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72   be used when cr
129c0 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76  eating the nativ
129d0 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64  e disposable mod
129e0 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ule...    /// </
129f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
12a00 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
12a10 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
12a20 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  e flags for the 
12a30 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20  associated <see 
12a40 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
12a50 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
12a60 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
12a70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12a80 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12a90 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
12aa0 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64  Module(SQLiteMod
12ab0 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69  ule module, SQLi
12ac0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
12ad0 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d  s flags)..    {.
12ae0 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
12af0 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
12b00 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12b10 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
12b20 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c  Exception("modul
12b30 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
12b40 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
12b50 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
12b60 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20  gs.NoLogModule) 
12b70 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
12b80 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f  ionFlags.NoLogMo
12b90 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  dule)..        {
12ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  ..            mo
12bb0 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d  dule.LogErrors =
12bc0 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
12bd0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
12be0 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29  .LogModuleError)
12bf0 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
12c00 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64  tionFlags.LogMod
12c10 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  uleError);..    
12c20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c          module.L
12c30 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d 20 28  ogExceptions = (
12c40 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
12c50 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
12c60 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f  ogModuleExceptio
12c70 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  n) == SQLiteConn
12c80 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
12c90 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b  oduleException);
12ca0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12cb0 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
12cc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12cd0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12ce0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
12cf0 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
12d00 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
12d10 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
12d20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
12d30 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
12d40 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 55   LoadExtension(U
12d50 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12d60 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c 20 22  ds.SQLITE_DLL, "
12d70 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f 69  sqlite3_vtshim_i
12d80 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nit");....      
12d90 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65    if (module.Cre
12da0 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64  ateDisposableMod
12db0 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20  ule(_sql))..    
12dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12dd0 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20     if (_modules 
12de0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12df0 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c            _modul
12e00 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  es = new Diction
12e10 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  ary<string, SQLi
12e20 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a  teModule>();....
12e30 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
12e40 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e  ules.Add(module.
12e50 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a  Name, module);..
12e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12e70 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
12e80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12e90 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73 65              _use
12ea0 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Pool = false;...
12eb0 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
12ec0 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
12ed0 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
12ee0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
12ef0 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
12f00 2e 46 6f 72 6d 61 74 28 22 43 72 65 61 74 65 4d  .Format("CreateM
12f10 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73  odule (Pool) Dis
12f20 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 20 5f 73 71  abled: {0}", _sq
12f30 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  l));..#endif..  
12f40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12f50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12f60 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
12f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
12f80 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
12f90 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45 72  eption(GetLastEr
12fa0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
12fb0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
12fc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12fd0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
12fe0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
12ff0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
13000 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70  order to cleanup
13010 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a   the resources..
13020 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
13030 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65  ed with a module
13040 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13050 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
13060 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
13070 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
13080 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
13090 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
130a0 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
130b0 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
130c0 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73   previously pass
130d0 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
130e0 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c  ref="CreateModul
130f0 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d  e" />..    /// m
13100 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
13110 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13120 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
13130 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
13140 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
13150 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
13160 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
13170 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
13180 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
13190 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
131a0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
131b0 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
131c0 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  oseModule(SQLite
131d0 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53  Module module, S
131e0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
131f0 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
13200 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
13210 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
13220 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
13230 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
13240 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f  ullException("mo
13250 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule");....     
13260 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73     module.Dispos
13270 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  e();..    }..#en
13280 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
13290 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74  nal override Int
132a0 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
132b0 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
132c0 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
132d0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
132e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
132f0 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
13300 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
13310 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23   1);..    }....#
13320 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
13330 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
13340 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13350 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
13360 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
13370 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
13380 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20  er to declare a 
13390 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
133a0 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
133b0 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
133c0 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
133d0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
133e0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
133f0 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65  ..    /// or <se
13400 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
13410 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
13420 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c  nect" /> virtual
13430 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d   table methods..
13440 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
13450 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
13460 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
13470 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
13480 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
13490 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  dule that is to 
134a0 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  be responsible f
134b0 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
134c0 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  able..    /// be
134d0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
134e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
134f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13500 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a  name="strSql">..
13510 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69      /// The stri
13520 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
13530 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
13540 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 76  describing the v
13550 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d  irtual table to.
13560 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c  .    /// be decl
13570 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
13580 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
13590 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
135a0 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  ror">..    /// U
135b0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65  pon success, the
135c0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69   contents of thi
135d0 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20  s parameter are 
135e0 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e  undefined.  Upon
135f0 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f   failure,..    /
13600 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e  // it should con
13610 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69  tain an appropri
13620 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ate error messag
13630 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
13640 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
13650 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
13660 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
13670 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
13680 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
13690 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
136a0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
136b0 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61  eErrorCode Decla
136c0 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d  reVirtualTable(.
136d0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
136e0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
136f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74         string st
13700 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72  rSql,..        r
13710 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
13720 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
13730 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
13740 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
13750 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13760 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
13770 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
13780 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
13790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
137a0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
137b0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
137c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
137d0 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d 20    IntPtr pSql = 
137e0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
137f0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
13800 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13810 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74      pSql = SQLit
13820 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
13830 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74 72  trFromString(str
13840 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
13850 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
13860 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
13870 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13880 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
13890 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
138a0 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b      _sql, pSql);
138b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
138c0 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
138d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
138e0 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c   (module != null
138f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13900 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61      module.Decla
13910 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  red = true;.... 
13920 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
13930 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
13940 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
13950 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
13960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
13970 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
13980 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
13990 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
139a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
139b0 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e  (pSql != IntPtr.
139c0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
139d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
139e0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
139f0 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a  ry.Free(pSql);..
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
13a20 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
13a30 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
13a40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
13a50 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
13a60 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
13a70 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
13a80 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
13a90 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69   to declare a vi
13aa0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
13ab0 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e   /// function in
13ac0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
13ad0 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
13ae0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
13af0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
13b00 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
13b10 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
13b20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
13b30 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
13b40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
13b50 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
13b60 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
13b70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
13b80 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
13b90 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
13ba0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
13bb0 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
13bc0 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
13bd0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
13be0 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65   /// function be
13bf0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
13c00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13c10 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13c20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f  name="argumentCo
13c30 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  unt">..    /// T
13c40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
13c50 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75  uments to the fu
13c60 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
13c70 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
13c80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13c90 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
13ca0 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
13cb0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
13cc0 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
13cd0 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
13ce0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
13cf0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13d00 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f  error">..    ///
13d10 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
13d20 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
13d30 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72  his parameter ar
13d40 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70  e undefined.  Up
13d50 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20  on failure,..   
13d60 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63   /// it should c
13d70 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70  ontain an approp
13d80 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73  riate error mess
13d90 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  age...    /// </
13da0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13db0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
13dc0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
13dd0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
13de0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
13df0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
13e00 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
13e10 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63  iteErrorCode Dec
13e20 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63 74  lareVirtualFunct
13e30 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ion(..        SQ
13e40 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
13e50 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  e,..        int 
13e60 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
13e70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
13e80 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ame,..        re
13e90 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
13ea0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
13eb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
13ec0 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
13ed0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13ee0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e      error = "con
13ef0 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
13f00 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d  nvalid handle";.
13f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
13f20 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
13f30 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
13f40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13f50 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20   IntPtr pName = 
13f60 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
13f70 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
13f80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13f90 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69      pName = SQLi
13fa0 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
13fb0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61  PtrFromString(na
13fc0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13fd0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
13fe0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
13ff0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14000 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
14010 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
14020 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e          _sql, pN
14030 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75  ame, argumentCou
14040 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
14050 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
14060 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
14070 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74   error = GetLast
14080 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  Error();....    
14090 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
140a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
140b0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
140c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
140d0 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20        if (pName 
140e0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
140f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
14120 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  e(pName);..     
14130 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
14140 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
14150 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14160 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
14170 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
14180 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14190 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
141a0 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
141b0 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
141c0 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
141d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
141e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
141f0 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
14200 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
14210 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
14220 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
14230 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
14240 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
14250 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14260 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
14270 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
14280 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
14290 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
142a0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
142b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
142c0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
142d0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
142e0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
142f0 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
14300 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
14310 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
14320 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
14330 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
14340 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
14350 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
14360 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
14370 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
14380 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
14390 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
143a0 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
143b0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
143c0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
143d0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
143e0 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
143f0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
14400 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
14410 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
14420 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
14430 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
14440 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
14450 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14460 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
14470 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
14480 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
14490 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
144a0 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
144b0 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
144c0 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
144d0 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
144e0 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
144f0 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
14500 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14510 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14520 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
14530 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
14540 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
14550 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
14560 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
14570 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
14580 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
14590 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
145a0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
145b0 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
145c0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
145d0 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
145e0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
145f0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
14600 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
14610 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
14620 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
14630 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
14640 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
14650 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
14660 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
14670 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
14680 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
14690 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
146b0 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
146c0 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
146d0 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
146e0 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
146f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
14700 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
14710 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14720 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
14730 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
14740 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
14750 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
14760 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
14770 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
14780 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
14790 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
147a0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
147b0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
147c0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
147d0 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
147e0 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
147f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14800 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
14810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14820 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
14830 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
14840 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14850 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
14860 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14870 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
14880 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
14890 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
148a0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
148b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
148c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
148d0 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
148e0 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
148f0 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
14900 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
14910 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
14920 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14930 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
14940 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
14950 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
14960 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
14970 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
14980 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14990 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
149a0 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
149b0 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
149c0 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
149d0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
149e0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
149f0 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
14a00 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
14a10 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
14a20 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
14a30 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
14a40 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
14a50 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
14a60 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
14a70 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
14a80 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
14a90 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
14aa0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14ab0 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
14ac0 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
14ad0 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
14ae0 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
14af0 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
14b00 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14b10 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
14b20 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
14b30 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
14b40 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
14b50 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
14b60 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
14b70 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
14b80 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
14b90 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
14ba0 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
14bb0 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
14bc0 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
14bd0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14be0 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
14bf0 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
14c00 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
14c10 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
14c20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14c30 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65  StaticLogMessage
14c40 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73  (iErrCode, zMess
14c50 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  age);..    }....
14c60 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
14c70 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
14c80 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
14c90 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
14ca0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
14cb0 61 74 69 63 20 76 6f 69 64 20 53 74 61 74 69 63  atic void Static
14cc0 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
14cd0 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
14ce0 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
14cf0 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
14d00 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
14d10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14d20 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f  log(iErrCode, To
14d30 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b  UTF8(zMessage));
14d40 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
14d50 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 7c 7c 20  NTEROP_CODEC || 
14d60 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
14d70 53 45 45 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  SEE..    interna
14d80 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
14d90 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65  SetPassword(byte
14da0 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  [] passwordBytes
14db0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14dc0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14dd0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
14de0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14df0 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
14e00 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
14e10 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
14e20 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
14e30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
14e40 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
14e50 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
14e60 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
14e70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
14e80 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14e90 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73  e void ChangePas
14ea0 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77  sword(byte[] new
14eb0 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a  PasswordBytes)..
14ec0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
14ed0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
14ee0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14ef0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b  hods.sqlite3_rek
14f00 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73  ey(_sql, newPass
14f10 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50  wordBytes, (newP
14f20 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20  asswordBytes == 
14f30 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50  null) ? 0 : newP
14f40 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
14f50 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
14f60 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
14f70 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
14f80 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
14f90 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
14fa0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
14fb0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e  #endif....    in
14fc0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14fd0 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73 73  void SetProgress
14fe0 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53  Hook(int nOps, S
14ff0 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c  QLiteProgressCal
15000 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
15010 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61   {..        Unsa
15020 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15030 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73  sqlite3_progress
15040 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20 6e  _handler(_sql, n
15050 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  Ops, func, IntPt
15060 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
15070 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
15080 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
15090 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28  tAuthorizerHook(
150a0 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72  SQLiteAuthorizer
150b0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
150c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
150d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
150e0 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  .sqlite3_set_aut
150f0 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75  horizer(_sql, fu
15100 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
15110 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
15120 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15130 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65  e void SetUpdate
15140 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74  Hook(SQLiteUpdat
15150 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
15160 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
15170 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15180 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65  s.sqlite3_update
15190 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
151a0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
151b0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
151c0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
151d0 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f  void SetCommitHo
151e0 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43  ok(SQLiteCommitC
151f0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
15200 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
15210 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15220 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68  sqlite3_commit_h
15230 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
15240 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
15250 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
15260 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15270 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62  id SetTraceCallb
15280 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43  ack(SQLiteTraceC
15290 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
152a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
152b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
152c0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73  sqlite3_trace(_s
152d0 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
152e0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
152f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
15300 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
15310 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c  RollbackHook(SQL
15320 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  iteRollbackCallb
15330 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
15340 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
15350 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15360 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f  te3_rollback_hoo
15370 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
15380 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
15390 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
153a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
153b0 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74   Allows the sett
153c0 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67  ing of a logging
153d0 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65   callback invoke
153e0 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e  d by SQLite when
153f0 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20   a..    /// log 
15400 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f  event occurs.  O
15410 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b  nly one callback
15420 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66   may be set.  If
15430 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c   NULL is passed,
15440 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f  ..    /// the lo
15450 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69  gging callback i
15460 73 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d  s unregistered..
15470 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
15480 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
15490 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e  ram name="func">
154a0 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  The callback fun
154b0 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e  ction to invoke.
154c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
154d0 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
154e0 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65  ns a result code
154f0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
15500 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15510 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
15520 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b  e SetLogCallback
15530 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61  (SQLiteLogCallba
15540 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
15550 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
15560 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
15570 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15580 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
15590 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20  _log(..         
155a0 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
155b0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
155c0 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20  NFIG_LOG, func, 
155d0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d  IntPtr.Zero);...
155e0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
155f0 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
15600 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
15610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15660 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
15670 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
15680 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51  Creates a new SQ
15690 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  Lite backup obje
156a0 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ct based on the 
156b0 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61  provided destina
156c0 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
156d0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
156e0 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64  n.  The source d
156f0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
15700 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20  on is the one.. 
15710 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
15720 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  d with this obje
15730 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  ct.  The source 
15740 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  and destination 
15750 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
15760 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61  / connections ca
15770 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65  nnot be the same
15780 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
15790 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
157a0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
157b0 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61  Cnn">The destina
157c0 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f  tion database co
157d0 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  nnection.</param
157e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
157f0 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65  m name="destName
15800 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
15810 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e  n database name.
15820 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15830 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
15840 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73  ourceName">The s
15850 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e  ource database n
15860 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ame.</param>..  
15870 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
15880 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64  he newly created
15890 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c   backup object.<
158a0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
158b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
158c0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e   SQLiteBackup In
158d0 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d  itializeBackup(.
158e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
158f0 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e  onnection destCn
15900 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  n,..        stri
15910 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20  ng destName,..  
15920 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75        string sou
15930 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  rceName..       
15940 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
15950 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d     if (destCnn =
15960 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15970 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
15980 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
15990 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b  tion("destCnn");
159a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
159b0 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  destName == null
159c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
159d0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
159e0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
159f0 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  destName");.... 
15a00 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
15a10 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
15a20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15a30 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
15a40 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75  llException("sou
15a50 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  rceName");....  
15a60 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65        SQLite3 de
15a70 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74  stSqlite3 = dest
15a80 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69  Cnn._sql as SQLi
15a90 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te3;....        
15aa0 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20  if (destSqlite3 
15ab0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15ac0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15ad0 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
15ae0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
15af0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
15b00 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
15b10 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20  no wrapper.",.. 
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15b30 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
15b40 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
15b50 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73  ectionHandle des
15b60 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71  tHandle = destSq
15b70 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20  lite3._sql;.... 
15b80 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48         if (destH
15b90 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15bb0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
15bc0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
15bd0 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69            "Desti
15be0 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  nation connectio
15bf0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
15c00 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20   handle.",..    
15c10 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
15c20 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
15c30 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
15c40 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65  ionHandle source
15c50 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a  Handle = _sql;..
15c60 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
15c70 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  urceHandle == nu
15c80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15c90 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
15ca0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
15cb0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
15cc0 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63         "Source c
15cd0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
15ce0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
15cf0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62  ");....        b
15d00 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20  yte[] zDestName 
15d10 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d  = ToUTF8(destNam
15d20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74  e);..        byt
15d30 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20  e[] zSourceName 
15d40 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e  = ToUTF8(sourceN
15d50 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
15d60 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
15d70 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65  dle backupHandle
15d80 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
15d90 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15db0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
15dc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15dd0 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
15de0 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
15df0 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
15e00 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
15e10 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
15e20 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65   backup = Unsafe
15e30 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
15e40 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69  lite3_backup_ini
15e50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
15e60 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20      destHandle, 
15e70 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63  zDestName, sourc
15e80 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65  eHandle, zSource
15e90 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
15ea0 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
15eb0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
15ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ee0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15ef0 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65   resultCode = Re
15f00 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20  sultCode();.... 
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15f20 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d  f (resultCode !=
15f30 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15f40 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
15f50 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15f60 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15f70 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20  ion(resultCode, 
15f80 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
15f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15fa0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15fc0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15fd0 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f  ption("failed to
15fe0 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b   initialize back
15ff0 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  up");..         
16000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16010 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65      backupHandle
16020 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63   = new SQLiteBac
16030 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61  kupHandle(destHa
16040 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a  ndle, backup);..
16050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16060 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
16070 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
16080 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
16090 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
160a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
160b0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
160c0 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
160d0 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a  lHandle, null,..
160e0 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
160f0 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61  , null, null, ba
16100 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c  ckupHandle, null
16110 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
16120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
16130 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 64  peof(SQLite3), d
16140 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d 65  estCnn, destName
16150 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29  , sourceName }))
16160 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
16170 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61  urn new SQLiteBa
16180 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20  ckup(..         
16190 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48     this, backupH
161a0 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c  andle, destHandl
161b0 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
161c0 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20  urceHandle,..   
161d0 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65           zSource
161e0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Name);..    }...
161f0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
16200 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69  y>..    /// Copi
16210 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73  es up to N pages
16220 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
16230 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
16240 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
16250 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61    /// database a
16260 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
16270 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
16280 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
16290 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
162a0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
162b0 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
162c0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
162d0 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
162e0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
162f0 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20  name="nPage">.. 
16300 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
16310 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f  r of pages to co
16320 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20  py, negative to 
16330 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  copy all remaini
16340 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f  ng pages...    /
16350 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
16360 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16370 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f  ="retry">..    /
16380 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69  // Set to true i
16390 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
163a0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72  needs to be retr
163b0 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62  ied due to datab
163c0 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63  ase..    /// loc
163d0 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68  king issues; oth
163e0 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66  erwise, set to f
163f0 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alse...    /// <
16400 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
16410 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
16420 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72  /// True if ther
16430 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73  e are more pages
16440 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66   to be copied, f
16450 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d  alse otherwise..
16460 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
16470 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
16480 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
16490 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20  StepBackup(..   
164a0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
164b0 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20  p backup,..     
164c0 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20     int nPage,.. 
164d0 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
164e0 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29  retry..        )
164f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
16500 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d   retry = false;.
16510 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  ...        if (b
16520 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
16530 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
16540 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
16550 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
16560 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
16570 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
16580 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
16590 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
165a0 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
165b0 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
165c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
165d0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
165e0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
165f0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
16600 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
16610 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
16620 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
16630 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
16640 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
16650 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
16660 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
16670 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
16680 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
16690 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
166a0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
166b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166c0 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
166d0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
166e0 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
166f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
16700 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
16710 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
16720 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
16730 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65  ckup_step(handle
16740 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20  Ptr, nPage);..  
16750 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74        backup._st
16760 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a  epResult = n; /*
16770 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20   NOTE: Save for 
16780 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61 63  use by FinishBac
16790 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  kup. */....     
167a0 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
167b0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
167c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
167d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
167e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
167f0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
16800 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
16810 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20  orCode.Busy)..  
16820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16830 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75       retry = tru
16840 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16850 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
16860 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16870 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
16880 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
16890 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20  ocked)..        
168a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
168b0 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
168c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
168d0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
168e0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
168f0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
16900 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a  rrorCode.Done)..
16910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16920 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16930 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
16940 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
16950 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16960 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16970 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
16980 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
16990 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
169a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
169b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
169c0 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
169d0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
169e0 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20  remaining to be 
169f0 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
16a00 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  source..    /// 
16a10 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
16a20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
16a30 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
16a40 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
16a50 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b  ed..    /// back
16a60 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
16a70 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16a80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16a90 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
16aa0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
16ab0 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
16ac0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
16ad0 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns>The number of
16ae0 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
16af0 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f   to be copied.</
16b00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
16b10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16b20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63  int RemainingBac
16b30 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
16b40 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
16b50 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
16b60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
16b70 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
16b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
16b90 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
16ba0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
16bb0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
16bc0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
16bd0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
16be0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
16bf0 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
16c00 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
16c10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16c20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
16c30 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
16c40 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
16c50 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
16c60 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
16c70 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
16c80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
16c90 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
16ca0 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
16cb0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
16cc0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
16cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
16ce0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
16cf0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
16d00 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16d10 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
16d20 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
16d30 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
16d40 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
16d50 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
16d60 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
16d70 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e  e3_backup_remain
16d80 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ing(handlePtr);.
16d90 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
16da0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
16db0 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
16dc0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
16dd0 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
16de0 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61 73  urce database as
16df0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f  sociated..    //
16e00 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  / with the speci
16e10 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
16e20 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
16e30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16e40 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
16e50 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
16e60 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b   object to check
16e70 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
16e80 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
16e90 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
16ea0 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75  pages in the sou
16eb0 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72  rce database.</r
16ec0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
16ed0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
16ee0 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b  nt PageCountBack
16ef0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
16f00 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
16f10 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
16f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
16f30 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
16f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
16f50 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
16f60 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
16f70 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
16f80 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
16f90 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
16fa0 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
16fb0 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
16fc0 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
16fd0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16fe0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
16ff0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
17000 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
17010 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
17020 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
17030 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
17040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
17050 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
17060 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
17070 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
17080 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
17090 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
170a0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
170b0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
170c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
170d0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
170e0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
170f0 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
17100 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ");....        r
17110 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
17120 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
17130 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75  3_backup_pagecou
17140 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  nt(handlePtr);..
17150 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17160 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
17170 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65  /// Destroys the
17180 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20   backup object, 
17190 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79  rolling back any
171a0 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79   backup that may
171b0 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20   be in..    /// 
171c0 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  progess...    //
171d0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
171e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
171f0 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
17200 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
17210 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e  destroy.</param>
17220 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17230 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e  verride void Fin
17240 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ishBackup(..    
17250 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17260 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
17270 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
17280 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
17290 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
172a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
172b0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
172c0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
172d0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
172e0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
172f0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
17300 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
17310 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
17320 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
17330 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17340 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
17350 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17370 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
17380 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
17390 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
173a0 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
173b0 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
173c0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
173d0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
173e0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
173f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
17400 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
17410 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
17420 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
17430 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
17440 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
17450 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69  ointer.");....#i
17460 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
17470 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
17480 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
17490 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
174a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
174b0 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f  up_finish_intero
174c0 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23  p(handlePtr);..#
174d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51  else..        SQ
174e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
174f0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
17500 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
17510 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64  ckup_finish(hand
17520 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d  lePtr);..#endif.
17530 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e  .        handle.
17540 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c  SetHandleAsInval
17550 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55  id();....#if COU
17560 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20  NT_HANDLE..     
17570 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
17580 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
17590 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70   || (n == backup
175a0 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20 68  ._stepResult)) h
175b0 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65  andle.WasRelease
175c0 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dOk();..#endif..
175d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
175e0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
175f0 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d  ode.Ok) && (n !=
17600 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
17610 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
17620 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
17630 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
17640 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
17650 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
17660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
176c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
176d0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
176e0 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
176f0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
17700 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
17710 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
17720 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
17730 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
17740 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
17750 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
17760 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
17770 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
17780 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
17790 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
177a0 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
177b0 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
177c0 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
177d0 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
177e0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
177f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17800 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49  verride bool IsI
17810 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20  nitialized()..  
17820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
17830 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74  urn StaticIsInit
17840 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20  ialized();..    
17850 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
17860 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17870 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
17880 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
17890 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69  brary has been i
178a0 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
178b0 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
178c0 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
178d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
178e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
178f0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62  ns>..    /// A b
17900 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e  oolean indicatin
17910 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
17920 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
17930 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
17940 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69  n..    /// initi
17950 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  alized for the c
17960 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
17970 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
17980 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
17990 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74  l static bool St
179a0 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
179b0 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
179c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
179d0 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76 65  // BUGFIX: Preve
179e0 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f 74  nt races with ot
179f0 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72 20  her threads for 
17a00 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63  this entire bloc
17a10 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20  k, due..        
17a20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74 68  //         to th
17a30 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65  e try/finally se
17a40 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69  mantics.  See ti
17a50 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37 37  cket [72905c9a77
17a60 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ]...        //..
17a70 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
17a80 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
17a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17aa0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17ab0 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68  // NOTE: Save th
17ac0 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c  e state of the l
17ad0 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64  ogging class and
17ae0 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74   then restore it
17af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17b00 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65 20         after we 
17b10 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69  are done to avoi
17b20 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61  d logging too ma
17b30 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e  ny false errors.
17b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
17b60 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20  ol savedEnabled 
17b70 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62  = SQLiteLog.Enab
17b80 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
17b90 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62    SQLiteLog.Enab
17ba0 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  led = false;....
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
17bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17bf0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
17c00 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65  s method [ab]use
17c10 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  s the fact that 
17c20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
17c30 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ys..            
17c40 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74      //       ret
17c50 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
17c60 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e   for any unknown
17c70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
17c80 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..         
17c90 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17ca0 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c  *unless* the SQL
17cb0 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ite library has 
17cc0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
17cd0 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  tialized...     
17ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17cf0 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73 65      In that case
17d00 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20   it will always 
17d10 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
17d20 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20  SUSE...         
17d30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17d40 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17d50 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
17d60 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17d70 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
17d80 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20  ig_none(..      
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
17da0 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
17db0 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
17dc0 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  NONE);....      
17dd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17de0 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
17df0 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b  rorCode.Misuse);
17e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
17e20 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
17e30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17e40 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
17e50 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e  nabled = savedEn
17e60 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
17e70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
17e80 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
17e90 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
17ea0 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e    /// Helper fun
17eb0 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76  ction to retriev
17ec0 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61  e a column of da
17ed0 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76  ta from an activ
17ee0 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  e statement...  
17ef0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
17f00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17f10 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
17f20 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
17f30 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75 67   step()'d throug
17f40 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  h</param>..    /
17f50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17f60 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73  flags">The flags
17f70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
17f80 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
17f90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
17fa0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
17fb0 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d 6e  ndex">The column
17fc0 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69 65   index to retrie
17fd0 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ve</param>..    
17fe0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17ff0 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f  "typ">The type o
18000 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64  f data contained
18010 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20   in the column. 
18020 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65   If Uninitialize
18030 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  d, this function
18040 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20 74   will retrieve t
18050 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66 6f  he datatype info
18060 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  rmation.</param>
18070 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
18080 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20 64  ns>Returns the d
18090 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ata in the colum
180a0 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
180b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
180c0 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  de object GetVal
180d0 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ue(SQLiteStateme
180e0 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
180f0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
18100 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
18110 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29   SQLiteType typ)
18120 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54  ..    {..      T
18130 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 20  ypeAffinity aff 
18140 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d  = typ.Affinity;.
18150 0a 20 20 20 20 20 20 69 66 20 28 61 66 66 20 3d  .      if (aff =
18160 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  = TypeAffinity.N
18170 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42 4e 75  ull) return DBNu
18180 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ll.Value;..     
18190 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d   Type t = null;.
181a0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70  ...      if (typ
181b0 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e  .Type != DbType.
181c0 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b  Object)..      {
181d0 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51  ..        t = SQ
181e0 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69  LiteConvert.SQLi
181f0 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70  teTypeToType(typ
18200 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20  );..        aff 
18210 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  = TypeToAffinity
18220 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  (t);..      }...
18230 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67  .      if ((flag
18240 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
18250 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c  tionFlags.GetAll
18260 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74  AsText) == SQLit
18270 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
18280 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a  .GetAllAsText)..
18290 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
182a0 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
182b0 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
182c0 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20  switch (aff)..  
182d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
182e0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
182f0 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
18300 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
18310 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
18320 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d   typ.Affinity ==
18330 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
18340 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt)..           
18350 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
18360 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69  (GetText(stmt, i
18370 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex));....     
18380 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e       int n = (in
18390 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c  t)GetBytes(stmt,
183a0 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c   index, 0, null,
183b0 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   0, 0);..       
183c0 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65     byte[] b = ne
183d0 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20  w byte[n];..    
183e0 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73        GetBytes(s
183f0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62  tmt, index, 0, b
18400 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, n);....    
18410 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
18420 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
18430 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20  d && n == 16).. 
18440 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18450 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a  n new Guid(b);..
18460 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
18470 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63  rn b;..        c
18480 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
18490 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20  .DateTime:..    
184a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
184b0 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69  DateTime(stmt, i
184c0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
184d0 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
184e0 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
184f0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
18500 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f  ll) return GetDo
18510 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
18520 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
18530 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
18540 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c  ngeType(GetDoubl
18550 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
18560 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
18570 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
18580 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
18590 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
185a0 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
185b0 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
185c0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
185d0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53  f (t == typeof(S
185e0 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
185f0 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  tSByte(stmt, ind
18600 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
18610 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
18620 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
18630 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  tByte(stmt, inde
18640 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
18650 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
18660 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
18670 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  tInt16(stmt, ind
18680 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
18690 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
186a0 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  UInt16)) return 
186b0 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
186c0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
186d0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
186e0 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72  of(Int32)) retur
186f0 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  n GetInt32(stmt,
18700 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
18710 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
18720 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74  eof(UInt32)) ret
18730 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74  urn GetUInt32(st
18740 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
18750 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
18760 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20  typeof(UInt64)) 
18770 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34  return GetUInt64
18780 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
18790 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
187a0 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
187b0 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ype(GetInt64(stm
187c0 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
187d0 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  ll);..        de
187e0 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
187f0 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
18800 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
18810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
18820 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
18830 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43  verride int GetC
18840 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51  ursorForTable(SQ
18850 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
18860 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20  mt, int db, int 
18870 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b  rootPage)..    {
18880 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
18890 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
188a0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
188b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
188c0 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e  _table_cursor_in
188d0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
188e0 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f  te_stmt, db, roo
188f0 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  tPage);..#else..
18900 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
18910 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
18920 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
18930 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
18940 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28  tRowIdForCursor(
18950 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
18960 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72  stmt, int cursor
18970 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
18980 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
18990 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64        long rowid
189a0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c   = 0;..      SQL
189b0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
189c0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
189d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75  thods.sqlite3_cu
189e0 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
189f0 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
18a00 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72 65  stmt, cursor, re
18a10 66 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20  f rowid);..     
18a20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
18a30 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72  eErrorCode.Ok) r
18a40 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a  eturn rowid;....
18a50 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
18a60 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
18a70 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
18a80 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18a90 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18aa0 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
18ab0 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
18ac0 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
18ad0 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
18ae0 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65  tring column, re
18af0 66 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  f int sortMode, 
18b00 72 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  ref int onError,
18b10 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c   ref string coll
18b20 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a  ationSequence)..
18b30 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
18b40 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
18b50 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20 3d     IntPtr coll =
18b60 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
18b70 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e       int colllen
18b80 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c   = 0;..      SQL
18b90 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b  iteErrorCode rc;
18ba0 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55  ....      rc = U
18bb0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18bc0 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
18bd0 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74  _column_info_int
18be0 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
18bf0 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55  8(database), ToU
18c00 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54  TF8(index), ToUT
18c10 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20  F8(column), ref 
18c20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f 6e  sortMode, ref on
18c30 45 72 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c 2c  Error, ref coll,
18c40 20 72 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a   ref colllen);..
18c50 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20        if (rc != 
18c60 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
18c70 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
18c80 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
18c90 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
18ca0 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
18cb0 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
18cc0 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e  ng(coll, colllen
18cd0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
18ce0 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a   sortMode = 0;..
18cf0 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20        onError = 
18d00 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  2;..      collat
18d10 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42  ionSequence = "B
18d20 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d  INARY";..#endif.
18d30 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18d40 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18d50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18d60 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69  FileControl(stri
18d70 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20  ng zDbName, int 
18d80 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29  op, IntPtr pArg)
18d90 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
18da0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
18db0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
18dc0 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f  3_file_control(_
18dd0 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d  sql, (zDbName !=
18de0 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28   null) ? ToUTF8(
18df0 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c  zDbName) : null,
18e00 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20   op, pArg);..   
18e10 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..