System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 55a0db1ae4655c56cc54b40442ee33d7e29a60be:


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 53 51 4c 69 74 65 43 6f 6e 6e  ected SQLiteConn
0a00: 65 63 74 69 6f 6e 46 6c 61 67 73 20 5f 66 6c 61  ectionFlags _fla
0a10: 67 73 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  gs;..    protect
0a20: 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c  ed bool _usePool
0a30: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0a40: 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   int _poolVersio
0a50: 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  n;..    private 
0a60: 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  int _cancelCount
0a70: 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35  ;....#if (NET_35
0a80: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
0a90: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 29  T_45 || NET_451)
0aa0: 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f   && !PLATFORM_CO
0ab0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
0ac0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
0ad0: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
0ae0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
0af0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0b00: 20 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72      /// The user
0b10: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0b20: 6e 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e  ns registered on
0b30: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0b40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0b50: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0b60: 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53  ted Dictionary<S
0b70: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
0b80: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
0b90: 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f  nction> _functio
0ba0: 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ns;....#if INTER
0bb0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0bd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0be0: 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64   modules created
0bf0: 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e   using this conn
0c00: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0c10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0c20: 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69   protected Dicti
0c30: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
0c40: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64  LiteModule> _mod
0c50: 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ules;..#endif...
0c60: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
0cd0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0ce0: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0cf0: 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  e object used to
0d00: 20 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74   interact with t
0d10: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0d20: 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  ibrary..    /// 
0d30: 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20  using the UTF-8 
0d40: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a  text encoding...
0d50: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0d60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0d70: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a  am name="fmt">..
0d80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65      /// The Date
0d90: 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62  Time format to b
0da0: 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76  e used when conv
0db0: 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61  erting string va
0dc0: 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f  lues to a..    /
0dd0: 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20  // DateTime and 
0de0: 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65  binding DateTime
0df0: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0e00: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0e10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0e20: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
0e30: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0e40: 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64  ef="DateTimeKind
0e50: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
0e60: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61  when creating Da
0e70: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0e80: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e90: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0ea0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0eb0: 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  fmtString">..   
0ec0: 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20   /// The format 
0ed0: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65  string to be use
0ee0: 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61  d when parsing a
0ef0: 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61  nd formatting Da
0f00: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0f10: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0f20: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0f30: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0f40: 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  db">..    /// Th
0f50: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
0f60: 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64  to be associated
0f70: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
0f80: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
0f90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0fa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0fb0: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
0fc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0fd0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
0fe0: 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  ile name associa
0ff0: 74 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72  ted with <paramr
1000: 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e  ef name="db "/>.
1010: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1020: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1030: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
1040: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
1050: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65  n-zero if the ne
1060: 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65  wly created obje
1070: 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c  ct instance will
1080: 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65   need to dispose
1090: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61  ..    /// of <pa
10a0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22  ramref name="db"
10b0: 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e   /> when it is n
10c0: 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e  o longer needed.
10d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
10e0: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
10f0: 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20   SQLite3(..     
1100: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1110: 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20  mats fmt,..     
1120: 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20     DateTimeKind 
1130: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73  kind,..        s
1140: 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c  tring fmtString,
1150: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
1160: 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74   db,..        st
1170: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
1180: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e          bool own
1190: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
11a0: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
11b0: 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74  fmt, kind, fmtSt
11c0: 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ring)..    {..  
11d0: 20 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20        if (db != 
11e0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
11f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1200: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
1210: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1220: 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61  Handle(db, ownHa
1230: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndle);..        
1240: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
1250: 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  fileName;....   
1260: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1270: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
1280: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
1290: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
12a0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
12b0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
12c0: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
12d0: 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
12e0: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
12f0: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
1300: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20  ll, null, _sql, 
1310: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
1320: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
1330: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1340: 28 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20  (SQLite3), fmt, 
1350: 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c  kind, fmtString,
1360: 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a   db, fileName,..
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1380: 6f 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a  ownHandle }));..
1390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
13a0: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
1410: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
1420: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
1430: 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74  bers..    privat
1440: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
1450: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
1460: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
1470: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
1480: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
1490: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
14a0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
14b0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
14c0: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
14d0: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
14e0: 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  on(typeof(SQLite
14f0: 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69  3).Name);..#endi
1500: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1570: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
1580: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
1590: 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
15a0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20  osing)..    {.. 
15b0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
15c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15d0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
15e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
15f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1600: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
1610: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
1620: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
1630: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1670: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69       //    // di
1680: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
1690: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b0: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
16f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1700: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
1740: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
1750: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
1760: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1770: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69  //////////....#i
17a0: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
17b0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L_TABLE..       
17c0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
17d0: 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64  Modules();..#end
17e0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
17f0: 20 20 20 20 20 20 43 6c 6f 73 65 28 66 61 6c 73        Close(fals
1800: 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67  e); /* Disposing
1810: 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20  , cannot throw. 
1820: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1830: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
1840: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
1850: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1860: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
1870: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a  se(disposing);..
1880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
18a0: 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e   NOTE: Everythin
18b0: 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c  g should be full
18c0: 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68  y disposed at th
18d0: 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20  is point...     
18e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18f0: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
1900: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1910: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
1920: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1930: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
19a0: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
19b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
19d0: 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74  ethod attempts t
19e0: 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c  o dispose of all
19f0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
1a00: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
1a10: 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f   derived..    //
1a20: 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  / object instanc
1a30: 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73 73  es currently ass
1a40: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1a50: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
1a60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
1a70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a80: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
1a90: 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
1aa0: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
1ab0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ac0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20  // NOTE: If any 
1ad0: 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72 65  modules were cre
1ae0: 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f  ated, attempt to
1af0: 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20   dispose of..   
1b00: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1b10: 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f  em now.  This co
1b20: 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  de is designed t
1b30: 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67  o avoid throwing
1b40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1b50: 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75 6e     exceptions un
1b60: 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73 65  less the Dispose
1b70: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
1b80: 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  odule..        /
1b90: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74  /       itself t
1ba0: 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
1bb0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  on...        //.
1bc0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f  .        if (_mo
1bd0: 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  dules != null)..
1be0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bf0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1c00: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
1c10: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
1c20: 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75  e> pair in _modu
1c30: 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  les)..          
1c40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c50: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
1c60: 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e  e module = pair.
1c70: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
1c80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
1c90: 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29  module.Dispose()
1ce0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d00: 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28 29  _modules.Clear()
1d10: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1d20: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
1d30: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20  //....    // It 
1da0: 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20  isn't necessary 
1db0: 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66  to cleanup any f
1dc0: 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72  unctions we've r
1dd0: 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74  egistered.  If t
1de0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  he connection.. 
1df0: 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68     // goes to th
1e00: 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65  e pool and is re
1e10: 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c  surrected later,
1e20: 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66   re-registered f
1e30: 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76  unctions will ov
1e40: 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20  erwrite the..   
1e50: 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e   // previous fun
1e60: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c  ctions.  The SQL
1e70: 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69  iteFunctionCooki
1e80: 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b  eHandle will tak
1e90: 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e  e care of freein
1ea0: 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20  g unmanaged..   
1eb0: 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65   // resources be
1ec0: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70  longing to the p
1ed0: 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74  reviously-regist
1ee0: 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  ered functions..
1ef0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1f00: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73  erride void Clos
1f10: 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29  e(bool canThrow)
1f20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
1f30: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
1f40: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1f50: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
1f60: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
1f70: 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e 64 46  ionFlags.UnbindF
1f80: 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29  unctionsOnClose)
1f90: 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ==..           
1fa0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1fb0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e  ctionFlags.Unbin
1fc0: 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73  dFunctionsOnClos
1fd0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
1ff0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
2000: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68  bindFunctions(th
2010: 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73  is, _flags, fals
2020: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  e);..          }
2030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
2040: 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c   (!_sql.OwnHandl
2050: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
2070: 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  sql = null;..   
2080: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2090: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n;..          }.
20a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
20b0: 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
20c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20d0: 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
20e0: 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65  eBase.ResetConne
20f0: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c  ction(_sql, _sql
2100: 2c 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20  , canThrow))..  
2110: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
2120: 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
2130: 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20  AL_TABLE..      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
2150: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23  oseModules();..#
2160: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2170: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2180: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
2190: 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f  Add(_fileName, _
21a0: 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f  sql, _poolVersio
21b0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
21c0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
21d0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
21e0: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
21f0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
2200: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2210: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2220: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
2230: 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f 6c  ype.ClosedToPool
2240: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
2270: 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d 65   _sql, _fileName
2280: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
2290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a0: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
22b0: 51 4c 69 74 65 33 29 2c 20 63 61 6e 54 68 72 6f  QLite3), canThro
22c0: 77 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 70  w, _fileName, _p
22d0: 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d  oolVersion }));.
22e0: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
22f0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2300: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2320: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
2330: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
2340: 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73  se (Pool) Succes
2350: 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  s: {0}", _sql));
2360: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2370: 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21          }..#if !
2380: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2390: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
23a0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
23b0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
23c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23d0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23e0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
23f0: 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20  g.Format("Close 
2400: 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20  (Pool) Failure: 
2410: 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 20  {0}", _sql));.. 
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2430: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2440: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
2450: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  lse..          {
2460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2470: 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d  _sql.Dispose();.
2480: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
2490: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
24a0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ull;..      }.. 
24b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2520: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2530: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
2540: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2550: 74 69 6d 65 73 20 74 68 65 20 3c 73 65 65 20 63  times the <see c
2560: 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20  ref="Cancel" /> 
2570: 6d 65 74 68 6f 64 20 68 61 73 20 62 65 65 6e 0d  method has been.
2580: 0a 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e  .    /// called.
2590: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
25a0: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
25b0: 65 20 69 6e 74 20 47 65 74 43 61 6e 63 65 6c 43  e int GetCancelC
25c0: 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ount()..    {.. 
25d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
25e0: 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72  terlocked.Compar
25f0: 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63  eExchange(ref _c
2600: 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30  ancelCount, 0, 0
2610: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
2620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
26a0: 68 69 73 20 6d 65 74 68 6f 64 20 64 65 74 65 72  his method deter
26b0: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
26c0: 20 6e 6f 74 20 61 20 3c 73 65 65 20 63 72 65 66   not a <see cref
26d0: 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  ="SQLiteExceptio
26e0: 6e 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77  n" />..    /// w
26f0: 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
2700: 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  e of <see cref="
2710: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
2720: 49 6e 74 65 72 72 75 70 74 22 20 2f 3e 20 73 68  Interrupt" /> sh
2730: 6f 75 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  ould..    /// be
2740: 20 74 68 72 6f 77 6e 20 61 66 74 65 72 20 6d 61   thrown after ma
2750: 6b 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f  king a call into
2760: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
2770: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
2780: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2790: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
27a0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
27b0: 72 6f 20 69 66 20 61 20 3c 73 65 65 20 63 72 65  ro if a <see cre
27c0: 66 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69  f="SQLiteExcepti
27d0: 6f 6e 22 20 2f 3e 20 74 6f 20 62 65 20 74 68 72  on" /> to be thr
27e0: 6f 77 6e 2e 20 20 54 68 69 73 20 6d 65 74 68 6f  own.  This metho
27f0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20  d..    /// will 
2800: 6f 6e 6c 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d  only return non-
2810: 7a 65 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65  zero if the <see
2820: 20 63 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f   cref="Cancel" /
2830: 3e 20 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c  > method was cal
2840: 6c 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65  led..    /// one
2850: 20 6f 72 20 6d 6f 72 65 20 74 69 6d 65 73 20 64   or more times d
2860: 75 72 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74  uring a call int
2870: 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
2880: 65 20 6c 69 62 72 61 72 79 20 28 65 2e 67 2e 20  e library (e.g. 
2890: 77 68 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  when..    /// th
28a0: 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  e sqlite3_prepar
28b0: 65 2a 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  e*() or sqlite3_
28c0: 73 74 65 70 28 29 20 41 50 49 73 20 61 72 65 20  step() APIs are 
28d0: 75 73 65 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  used)...    /// 
28e0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
28f0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f  private bool Sho
2900: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
2910: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
2920: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 43 61      return GetCa
2930: 6e 63 65 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b  ncelCount() > 0;
2940: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
29b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
29c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73  ry>..    /// Res
29d0: 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ets the value of
29e0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29f0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e  _cancelCount" />
2a00: 20 66 69 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f   field...    ///
2a10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a20: 20 70 72 69 76 61 74 65 20 69 6e 74 20 52 65 73   private int Res
2a30: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d  etCancelCount().
2a40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2a50: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
2a60: 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e  ed.CompareExchan
2a70: 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f  ge(ref _cancelCo
2a80: 75 6e 74 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43  unt, 0, _cancelC
2a90: 6f 75 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ount);..    }...
2aa0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
2b10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2b20: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69  // Attempts to i
2b30: 6e 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65  nterrupt the que
2b40: 72 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  ry currently exe
2b50: 63 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73  cuting on the as
2b60: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f  sociated..    //
2b70: 2f 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  / native databas
2b80: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
2b90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2ba0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
2bb0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61  override void Ca
2bc0: 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ncel()..    {.. 
2bd0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
2be0: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  {..        // do
2bf0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2c00: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
2c10: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
2c20: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
2c30: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
2c40: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 65 72  {..        Inter
2c50: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
2c60: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
2c70: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  t);..        Uns
2c80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2c90: 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  .sqlite3_interru
2ca0: 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  pt(_sql);..     
2cb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2cc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2cd0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
2ce0: 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73  ction binds a us
2cf0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
2d00: 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  ion to the conne
2d10: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
2d20: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2d30: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2d40: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
2d50: 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  te">..    /// Th
2d60: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
2d70: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
2d80: 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69  bute"/> object i
2d90: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
2da0: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  ng..    /// the 
2db0: 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68 65  metadata for the
2dc0: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
2dd0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
2de0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
2df0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
2e00: 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f  unction">..    /
2e10: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2e20: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
2e30: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
2e40: 6e 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  nce that impleme
2e50: 6e 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  nts the..    ///
2e60: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
2e70: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
2e80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
2e90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
2ea0: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
2eb0: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
2ec0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
2ed0: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
2ee0: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
2ef0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
2f00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2f10: 20 76 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69   void BindFuncti
2f20: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
2f30: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
2f40: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
2f50: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
2f60: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
2f70: 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  function,..     
2f80: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2f90: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a  ionFlags flags..
2fa0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
2fb0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75  ..        if (fu
2fc0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
2fd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2fe0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2ff0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
3000: 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41  ption("functionA
3010: 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20  ttribute");.... 
3020: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
3030: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
3040: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3050: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
3060: 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74  Exception("funct
3070: 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion");....      
3080: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
3090: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
30a0: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
30b0: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
30c0: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
30d0: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
30e0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
30f0: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
3100: 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ons = new Dictio
3110: 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74  nary<SQLiteFunct
3120: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51  ionAttribute, SQ
3130: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b  LiteFunction>();
3140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75 6e  ....        _fun
3150: 63 74 69 6f 6e 73 5b 66 75 6e 63 74 69 6f 6e 41  ctions[functionA
3160: 74 74 72 69 62 75 74 65 5d 20 3d 20 66 75 6e 63  ttribute] = func
3170: 74 69 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tion;..    }....
3180: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
31a0: 66 75 6e 63 74 69 6f 6e 20 62 69 6e 64 73 20 61  function binds a
31b0: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
31c0: 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f  nction to the co
31d0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
31e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
31f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3200: 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  me="functionAttr
3210: 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ibute">..    ///
3220: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
3230: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
3240: 74 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63  tribute"/> objec
3250: 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
3260: 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  ining..    /// t
3270: 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20  he metadata for 
3280: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
3290: 62 65 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20  be unbound...   
32a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
32b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
32c0: 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
32d0: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61   /// The flags a
32e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
32f0: 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
3300: 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  tion object...  
3310: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3320: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3330: 3e 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65  >Non-zero if the
3340: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e   function was un
3350: 62 6f 75 6e 64 20 61 6e 64 20 72 65 6d 6f 76 65  bound and remove
3360: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
3370: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3380: 69 64 65 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46  ide bool UnbindF
3390: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
33a0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
33b0: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
33c0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
33d0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
33e0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
33f0: 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  s..        )..  
3400: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
3410: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
3420: 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  te == null)..   
3430: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
3440: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
3450: 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69  xception("functi
3460: 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a  onAttribute");..
3470: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
3480: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
3490: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
34a0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
34b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
34c0: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 3b  nction function;
34d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
34e0: 5f 66 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65  _functions.TryGe
34f0: 74 56 61 6c 75 65 28 66 75 6e 63 74 69 6f 6e 41  tValue(functionA
3500: 74 74 72 69 62 75 74 65 2c 20 6f 75 74 20 66 75  ttribute, out fu
3510: 6e 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  nction))..      
3520: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3530: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
3540: 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69  ion.UnbindFuncti
3550: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
3560: 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 66           this, f
3570: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3580: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
3590: 73 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  s) &&..         
35a0: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
35b0: 73 2e 52 65 6d 6f 76 65 28 66 75 6e 63 74 69 6f  s.Remove(functio
35c0: 6e 41 74 74 72 69 62 75 74 65 29 29 0d 0a 20 20  nAttribute))..  
35d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
35f0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
3600: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
3620: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
3630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3640: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
3650: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
3660: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
3670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3680: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
3690: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sion;..      }..
36a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
36b0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
36c0: 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  nt VersionNumber
36d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
36e0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
36f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
3700: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
3710: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3720: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3730: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
3740: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
3750: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
3760: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
3770: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
3780: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
3790: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
37a0: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
37b0: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
37c0: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
37d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
37e0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
37f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
3800: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
3810: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3820: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
3830: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
3840: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3870: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
3880: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
38d0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
3900: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3920: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
3930: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
3940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3950: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3960: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
3970: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
3980: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
39a0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
39b0: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
39c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
39d0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
39e0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
39f0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
3a00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a10: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
3a20: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
3a30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3a40: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
3a50: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
3a60: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
3a70: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
3a80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3a90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3aa0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
3ab0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
3ac0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
3ad0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3ae0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
3af0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
3b00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
3b10: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3b20: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
3b30: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
3b40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3b50: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
3b60: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
3b70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3b80: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
3b90: 67 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f  g SQLiteCompileO
3ba0: 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ptions..    {.. 
3bb0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
3bc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3bd0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
3be0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
3bf0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
3c10: 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  index = 0;..    
3c20: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
3c30: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
3c40: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3c50: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
3c60: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
3c70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
3c80: 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20  hile (zValue != 
3c90: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
3ca0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3cc0: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
3cd0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
3ce0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3cf0: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54  result.Append(UT
3d20: 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75  F8ToString(zValu
3d30: 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  e, -1));..      
3d40: 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65            zValue
3d50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3d60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3d70: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
3d80: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20  (index++);..    
3d90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3da0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3db0: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
3dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
3dd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3de0: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
3df0: 6e 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  ng InteropVersio
3e00: 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  n..    {..      
3e10: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
3e20: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
3e30: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
3e40: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
3e50: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
3e60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65  tiveMethods.inte
3e70: 72 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  rop_libversion()
3e80: 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  , -1);..#else.. 
3e90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3ea0: 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  n null;..#endif.
3eb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
3ec0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3ed0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
3ee0: 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d  InteropSourceId.
3ef0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3f00: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
3f10: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
3f20: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
3f30: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
3f40: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
3f50: 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f  veMethods.intero
3f60: 70 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  p_sourceid(), -1
3f70: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
3f80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
3f90: 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
3fa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3fb0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
3fc0: 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65  atic string Inte
3fd0: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  ropCompileOption
3fe0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
3ff0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4000: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4010: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
4020: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
4030: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
4040: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
4050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
4060: 20 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20   index = 0;..   
4070: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4080: 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e  zValue = UnsafeN
4090: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74  ativeMethods.int
40a0: 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  erop_compileopti
40b0: 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b  on_get(index++);
40c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
40d0: 77 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d  while (zValue !=
40e0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
40f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4110: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
4120: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
4130: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4140: 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d  .Append(' ');...
4150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4160: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55   result.Append(U
4170: 54 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c  TF8ToString(zVal
4180: 75 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  ue, -1));..     
4190: 20 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75             zValu
41a0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
41b0: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
41c0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
41d0: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20  t(index++);..   
41e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
41f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4200: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
4210: 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ();..#else..    
4220: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4230: 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ull;..#endif..  
4240: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4250: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4260: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74  verride bool Aut
4270: 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a  oCommit..    {..
4280: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
42a0: 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28  rn IsAutocommit(
42b0: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
42c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
42d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
42e0: 72 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49  rride long LastI
42f0: 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20  nsertRowId..    
4300: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
4310: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
4320: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
4330: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72  EWORK..        r
4340: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
4350: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4360: 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
4370: 77 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69  wid(_sql);..#eli
4380: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
4390: 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67  RD..        long
43a0: 20 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20   rowId = 0;..   
43b0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
43c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
43d0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
43e0: 69 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  id_interop(_sql,
43f0: 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20   ref rowId);..  
4400: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77        return row
4410: 49 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  Id;..#else..    
4420: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
4430: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
4440: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
4450: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4460: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4470: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68   override int Ch
4480: 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  anges..    {..  
4490: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
44a0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
44b0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
44c0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
44d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
44e0: 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72  e3_changes_inter
44f0: 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65  op(_sql);..#else
4500: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4510: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4520: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61  hods.sqlite3_cha
4530: 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e  nges(_sql);..#en
4540: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  dif..      }..  
4550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4560: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
4570: 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20  g MemoryUsed..  
4580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4590: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
45a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
45b0: 53 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64  StaticMemoryUsed
45c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
45d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
45e0: 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  nal static long 
45f0: 53 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64  StaticMemoryUsed
4600: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4610: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
4620: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4630: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4650: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
4660: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4670: 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a  memory_used();..
4680: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
4690: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
46a0: 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d      long bytes =
46b0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
46c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
46d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
46e0: 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70  ory_used_interop
46f0: 28 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20  (ref bytes);..  
4700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4710: 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a   bytes;..#else..
4720: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
4730: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
4740: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
4750: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4760: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4770: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4780: 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48  ide long MemoryH
4790: 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d  ighwater..    {.
47a0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
47b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
47c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
47d0: 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  icMemoryHighwate
47e0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  r;..        }.. 
47f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4800: 72 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67  rnal static long
4810: 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67   StaticMemoryHig
4820: 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20  hwater..    {.. 
4830: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4840: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
4850: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
4860: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
4870: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
4880: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4890: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
48a0: 68 77 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69  hwater(0);..#eli
48b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
48c0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
48d0: 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d  long bytes = 0;.
48e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
48f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4900: 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  .sqlite3_memory_
4910: 68 69 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f  highwater_intero
4920: 70 28 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b  p(0, ref bytes);
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4940: 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c  turn bytes;..#el
4950: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4960: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
4970: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
4980: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
4990: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
49a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
49b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
49c0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
49d0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
49e0: 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
49f0: 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65  n handle is owne
4a00: 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68  d..    /// by th
4a10: 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  is instance...  
4a20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4a30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4a40: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e  verride bool Own
4a50: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Handle..    {.. 
4a60: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4a70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a80: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
4a90: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4aa0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
4ab0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4ac0: 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  "no connection h
4ad0: 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22  andle available"
4ae0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4af0: 20 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77    return _sql.Ow
4b00: 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20  nHandle;..      
4b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4b20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4b30: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
4b40: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 6c 69 73   the logical lis
4b50: 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 20 61  t of functions a
4b60: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
4b70: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  his connection..
4b80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4b90: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
4ba0: 6c 20 6f 76 65 72 72 69 64 65 20 49 44 69 63 74  l override IDict
4bb0: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
4bc0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
4bd0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20  SQLiteFunction> 
4be0: 46 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 7b  Functions..    {
4bf0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20  ..        get { 
4c00: 72 65 74 75 72 6e 20 5f 66 75 6e 63 74 69 6f 6e  return _function
4c10: 73 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  s; }..    }.... 
4c20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4c30: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
4c40: 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74  Code SetMemorySt
4c50: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
4c60: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4c70: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 65   return StaticSe
4c80: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61  tMemoryStatus(va
4c90: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
4ca0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4cb0: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
4cc0: 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d  ode StaticSetMem
4cd0: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
4ce0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
4cf0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4d00: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
4d10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4d20: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e  qlite3_config_in
4d30: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
4d40: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
4d50: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
4d60: 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c  G_MEMSTATUS, val
4d70: 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a  ue ? 1 : 0);....
4d80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
4d90: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
4da0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4db0: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
4dc0: 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68   to free as much
4dd0: 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 61 73 20   heap memory as 
4de0: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65  possible for the
4df0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
4e00: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
4e10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
4e20: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74  // <returns>A st
4e30: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
4e40: 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20  turn code (i.e. 
4e50: 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73  zero for success
4e60: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f   and non-zero fo
4e70: 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74  r failure).</ret
4e80: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4e90: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
4ea0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6c  iteErrorCode Rel
4eb0: 65 61 73 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20  easeMemory()..  
4ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
4ed0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
4ee0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
4ef0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
4f00: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
4f10: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  _sql);..        
4f20: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
4f30: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
4f40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4f50: 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  Attempts to free
4f60: 20 4e 20 62 79 74 65 73 20 6f 66 20 68 65 61 70   N bytes of heap
4f70: 20 6d 65 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c   memory by deall
4f80: 6f 63 61 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65  ocating non-esse
4f90: 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20  ntial memory..  
4fa0: 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e    /// allocation
4fb0: 73 20 68 65 6c 64 20 62 79 20 74 68 65 20 64 61  s held by the da
4fc0: 74 61 62 61 73 65 20 6c 69 62 72 61 72 79 2e 20  tabase library. 
4fd0: 4d 65 6d 6f 72 79 20 75 73 65 64 20 74 6f 20 63  Memory used to c
4fe0: 61 63 68 65 20 64 61 74 61 62 61 73 65 20 70 61  ache database pa
4ff0: 67 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20  ges..    /// to 
5000: 69 6d 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61  improve performa
5010: 6e 63 65 20 69 73 20 61 6e 20 65 78 61 6d 70 6c  nce is an exampl
5020: 65 20 6f 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  e of non-essenti
5030: 61 6c 20 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73  al memory.  This
5040: 20 69 73 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20   is a no-op..   
5050: 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a   /// returning z
5060: 65 72 6f 20 69 66 20 74 68 65 20 53 51 4c 69 74  ero if the SQLit
5070: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77  e core library w
5080: 61 73 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20  as not compiled 
5090: 77 69 74 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  with the compile
50a0: 2d 74 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f  -time..    /// o
50b0: 70 74 69 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41  ption SQLITE_ENA
50c0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
50d0: 45 4d 45 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c  EMENT.  Optional
50e0: 6c 79 2c 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ly, attempts to 
50f0: 72 65 73 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20  reset and/or..  
5100: 20 20 2f 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68    /// compact th
5110: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
5120: 65 61 70 2c 20 69 66 20 61 70 70 6c 69 63 61 62  eap, if applicab
5130: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
5140: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5150: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42   <param name="nB
5160: 79 74 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ytes">..    /// 
5170: 54 68 65 20 72 65 71 75 65 73 74 65 64 20 6e 75  The requested nu
5180: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
5190: 20 66 72 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   free...    /// 
51a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
51b0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
51c0: 65 73 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  eset">..    /// 
51d0: 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65  Non-zero to atte
51e0: 6d 70 74 20 61 20 68 65 61 70 20 72 65 73 65 74  mpt a heap reset
51f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
5200: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
5210: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63  ram name="compac
5220: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
5230: 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74  -zero to attempt
5240: 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e   heap compaction
5250: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
5260: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
5270: 72 61 6d 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22  ram name="nFree"
5280: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
5290: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61  umber of bytes a
52a0: 63 74 75 61 6c 6c 79 20 66 72 65 65 64 2e 20 20  ctually freed.  
52b0: 54 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62  This value may b
52c0: 65 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  e zero...    ///
52d0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
52e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
52f0: 72 65 73 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f  resetOk">..    /
5300: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69  // This value wi
5310: 6c 6c 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69  ll be non-zero i
5320: 66 20 74 68 65 20 68 65 61 70 20 72 65 73 65 74  f the heap reset
5330: 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2e   was successful.
5340: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5350: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5360: 61 6d 20 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73  am name="nLarges
5370: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  t">..    /// The
5380: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72   size of the lar
5390: 67 65 73 74 20 63 6f 6d 6d 69 74 74 65 64 20 66  gest committed f
53a0: 72 65 65 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65  ree block in the
53b0: 20 68 65 61 70 2c 20 69 6e 20 62 79 74 65 73 2e   heap, in bytes.
53c0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76  ..    /// This v
53d0: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 7a 65 72  alue will be zer
53e0: 6f 20 75 6e 6c 65 73 73 20 68 65 61 70 20 63 6f  o unless heap co
53f0: 6d 70 61 63 74 69 6f 6e 20 69 73 20 65 6e 61 62  mpaction is enab
5400: 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  led...    /// </
5410: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5420: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
5430: 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
5440: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
5450: 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20   (i.e. zero for 
5460: 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d  success and non-
5470: 7a 65 72 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f  zero..    /// fo
5480: 72 20 66 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20  r failure)...   
5490: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
54a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
54b0: 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  atic SQLiteError
54c0: 43 6f 64 65 20 53 74 61 74 69 63 52 65 6c 65 61  Code StaticRelea
54d0: 73 65 4d 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20  seMemory(..     
54e0: 20 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a     int nBytes,..
54f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73          bool res
5500: 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  et,..        boo
5510: 6c 20 63 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20  l compact,..    
5520: 20 20 20 20 72 65 66 20 69 6e 74 20 6e 46 72 65      ref int nFre
5530: 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  e,..        ref 
5540: 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20  bool resetOk,.. 
5550: 20 20 20 20 20 20 20 72 65 66 20 75 69 6e 74 20         ref uint 
5560: 6e 4c 61 72 67 65 73 74 0d 0a 20 20 20 20 20 20  nLargest..      
5570: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
5580: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5590: 6f 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45  ode rc = SQLiteE
55a0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a  rrorCode.Ok;....
55b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 46 72 65          int nFre
55c0: 65 4c 6f 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e  eLocal = UnsafeN
55d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
55e0: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
55f0: 6f 72 79 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20  ory(nBytes);..  
5600: 20 20 20 20 20 20 75 69 6e 74 20 6e 4c 61 72 67        uint nLarg
5610: 65 73 74 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20  estLocal = 0;.. 
5620: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65         bool rese
5630: 74 4f 6b 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65  tOkLocal = false
5640: 3b 0d 0a 0d 0a 23 69 66 20 21 44 45 42 55 47 20  ;....#if !DEBUG 
5650: 26 26 20 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f  && WINDOWS // NO
5660: 54 45 3a 20 53 68 6f 75 6c 64 20 62 65 20 22 57  TE: Should be "W
5670: 49 4e 33 32 48 45 41 50 20 26 26 20 21 4d 45 4d  IN32HEAP && !MEM
5680: 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53  DEBUG && WINDOWS
5690: 22 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  "..        if ((
56a0: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
56b0: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72 65 73  rCode.Ok) && res
56c0: 65 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  et)..        {..
56d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
56e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
56f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
5700: 33 32 5f 72 65 73 65 74 5f 68 65 61 70 28 29 3b  32_reset_heap();
5710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5720: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
5730: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5750: 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72  esetOkLocal = tr
5760: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
5770: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72  ..        if ((r
5780: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
5790: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 63 6f 6d 70  Code.Ok) && comp
57a0: 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
57b0: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
57c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
57d0: 65 33 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74  e3_win32_compact
57e0: 5f 68 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65  _heap(ref nLarge
57f0: 73 74 4c 6f 63 61 6c 29 3b 0d 0a 23 65 6c 73 65  stLocal);..#else
5800: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 65  ..        if (re
5810: 73 65 74 20 7c 7c 20 63 6f 6d 70 61 63 74 29 0d  set || compact).
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
5830: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5840: 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 23 65 6e  e.NotFound;..#en
5850: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e  dif....        n
5860: 46 72 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61  Free = nFreeLoca
5870: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61 72  l;..        nLar
5880: 67 65 73 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c  gest = nLargestL
5890: 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72  ocal;..        r
58a0: 65 73 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b  esetOk = resetOk
58b0: 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  Local;....      
58c0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
58d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
58e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
58f0: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
5900: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
5910: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
5920: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
5930: 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  fferent..    ///
5940: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
5950: 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65  ptions.  We depe
5960: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
5970: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
5980: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
5990: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
59a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
59b0: 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53  rns a standard S
59c0: 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64  QLite result cod
59d0: 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
59e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
59f0: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
5a00: 6f 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a  ode Shutdown()..
5a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
5a20: 65 74 75 72 6e 20 53 74 61 74 69 63 53 68 75 74  eturn StaticShut
5a30: 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20  down(false);..  
5a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5a60: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
5a70: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
5a80: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
5a90: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
5aa0: 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  fferent..    ///
5ab0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
5ac0: 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65  ptions.  We depe
5ad0: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
5ae0: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
5af0: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
5b00: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5b10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5b20: 64 69 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20  directories">.. 
5b30: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
5b40: 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 61 74  to reset the dat
5b50: 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
5b60: 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20  ary directories 
5b70: 74 6f 20 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f  to their..    //
5b80: 2f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  / default values
5b90: 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
5ba0: 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e  e null for both.
5bb0: 20 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72    This parameter
5bc0: 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f   has no..    ///
5bd0: 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57   effect on non-W
5be0: 69 6e 64 6f 77 73 20 6f 70 65 72 61 74 69 6e 67  indows operating
5bf0: 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f   systems...    /
5c00: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
5c10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
5c20: 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64  turns a standard
5c30: 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63   SQLite result c
5c40: 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ode.</returns>..
5c50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5c60: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
5c70: 6f 64 65 20 53 74 61 74 69 63 53 68 75 74 64 6f  ode StaticShutdo
5c80: 77 6e 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  wn(..        boo
5c90: 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 20  l directories.. 
5ca0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
5cb0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5cc0: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51  rrorCode rc = SQ
5cd0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5ce0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
5cf0: 28 64 69 72 65 63 74 6f 72 69 65 73 29 0d 0a 20  (directories).. 
5d00: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49         {..#if WI
5d10: 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20  NDOWS..         
5d20: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
5d30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
5d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d50: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
5d60: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5d70: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
5d80: 65 63 74 6f 72 79 28 31 2c 20 6e 75 6c 6c 29 3b  ectory(1, null);
5d90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5da0: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
5db0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5dd0: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
5de0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5df0: 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
5e00: 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23  ory(2, null);..#
5e10: 65 6c 73 65 0d 0a 23 69 66 20 21 4e 45 54 5f 43  else..#if !NET_C
5e20: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
5e30: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
5e40: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
5e50: 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20  .WriteLine(..   
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 68               "Sh
5e70: 75 74 64 6f 77 6e 3a 20 43 61 6e 6e 6f 74 20 72  utdown: Cannot r
5e80: 65 73 65 74 20 64 69 72 65 63 74 6f 72 69 65 73  eset directories
5e90: 20 6f 6e 20 74 68 69 73 20 70 6c 61 74 66 6f 72   on this platfor
5ea0: 6d 2e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23  m.");..#endif..#
5eb0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
5ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
5ed0: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
5ee0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
5ef0: 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61         rc = Unsa
5f00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5f10: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
5f20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
5f30: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
5f40: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5f50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
5f60: 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
5f70: 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69   associated nati
5f80: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
5f90: 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20  ndle is open... 
5fa0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5fb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
5fc0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
5fd0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73  n-zero if the as
5fe0: 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20  sociated native 
5ff0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
6000: 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20  e is open...    
6010: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
6020: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6030: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65  rride bool IsOpe
6040: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
6050: 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c      return (_sql
6060: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73   != null) && !_s
6070: 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20  ql.IsInvalid && 
6080: 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d  !_sql.IsClosed;.
6090: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
60a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
60b0: 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67  void Open(string
60c0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74   strFilename, st
60d0: 72 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51  ring vfsName, SQ
60e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
60f0: 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  ags connectionFl
6100: 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46  ags, SQLiteOpenF
6110: 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61  lagsEnum openFla
6120: 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53  gs, int maxPoolS
6130: 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f  ize, bool usePoo
6140: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
6150: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
6160: 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61 62  TE: If the datab
6170: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
6180: 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  s currently open
6190: 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20  , attempt to..  
61a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f      //       clo
61b0: 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73  se it now.  This
61c0: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65   must be done be
61d0: 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e  cause the file n
61e0: 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f  ame or..      //
61f0: 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61 72         other par
6200: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
6210: 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65   impact the unde
6220: 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d  rlying database.
6230: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
6240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68  connection may h
6250: 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20  ave changed...  
6260: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
6270: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20   (_sql != null) 
6280: 43 6c 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a  Close(true);....
6290: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
62a0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
62b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e  connection was n
62c0: 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73  ot closed succes
62d0: 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e  sfully, throw an
62e0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
62f0: 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d   exception now..
6300: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
6310: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
6320: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  l)..          th
6330: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
6340: 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74  ception("connect
6350: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74  ion handle is st
6360: 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d  ill active");...
6370: 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20  .      _usePool 
6380: 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20  = usePool;..    
6390: 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74    _fileName = st
63a0: 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20  rFilename;..    
63b0: 20 20 5f 66 6c 61 67 73 20 3d 20 63 6f 6e 6e 65    _flags = conne
63c0: 63 74 69 6f 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20  ctionFlags;.... 
63d0: 20 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c       if (usePool
63e0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
63f0: 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74      _sql = SQLit
6400: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
6410: 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61  Remove(strFilena
6420: 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  me, maxPoolSize,
6430: 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   out _poolVersio
6440: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  n);....        S
6450: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
6460: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
6470: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
6480: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
6490: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
64a0: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
64b0: 4f 70 65 6e 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20  OpenedFromPool, 
64c0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
64d0: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
64e0: 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69  ull, _sql, strFi
64f0: 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65  lename, new obje
6500: 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ct[] {..        
6510: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
6520: 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65  e3), strFilename
6530: 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65  , vfsName, conne
6540: 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20  ctionFlags,..   
6550: 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c 61           openFla
6560: 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  gs, maxPoolSize,
6570: 20 75 73 65 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56   usePool, _poolV
6580: 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23  ersion }));....#
6590: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
65a0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
65b0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
65c0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
65d0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
65e0: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
65f0: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
6600: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
6610: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
6620: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
6630: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
6640: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
6650: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
6660: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
6670: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
6680: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
6690: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
66a0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
66b0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
66c0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
66d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
66e0: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
66f0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
6700: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6710: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
6720: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
6730: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  D..          int
6740: 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f   extFuncs = ((co
6750: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20  nnectionFlags & 
6760: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6770: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
6780: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  nFunctions) != S
6790: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
67a0: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
67b0: 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a  Functions) ? 1 :
67c0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
67d0: 20 69 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d   if (extFuncs !=
67e0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
67f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
6800: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6810: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
6820: 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46  en_interop(ToUTF
6830: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
6840: 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c  ToUTF8(vfsName),
6850: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46   openFlags, extF
6860: 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a  uncs, ref db);..
6870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6880: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
6890: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  dif..          {
68a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
68b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
68c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
68d0: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
68e0: 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64  Filename), ref d
68f0: 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f  b, openFlags, To
6900: 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d  UTF8(vfsName));.
6910: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
6920: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
6930: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
6940: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
6950: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
6960: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
6970: 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62  ("Open: {0}", db
6980: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
6990: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
69a0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
69b0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
69c0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
69d0: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
69e0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
69f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6a00: 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29  Handle(db, true)
6a10: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
6a20: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c        lock (_sql
6a30: 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72  ) { /* HACK: For
6a40: 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b  ce the SyncBlock
6a50: 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22   to be "created"
6a60: 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20   now. */ }....  
6a70: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
6a80: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
6a90: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
6aa0: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
6ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
6ac0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
6ad0: 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63  ntType.NewCritic
6ae0: 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d  alHandle, null,.
6af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c  .            nul
6b00: 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f  l, null, null, _
6b10: 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65  sql, strFilename
6b20: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
6b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
6b40: 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 73  peof(SQLite3), s
6b50: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e  trFilename, vfsN
6b60: 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46  ame, connectionF
6b70: 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
6b80: 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61     openFlags, ma
6b90: 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f  xPoolSize, usePo
6ba0: 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 7d  ol }));..      }
6bb0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e  ....      // Bin
6bc0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74  d functions to t
6bd0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  his connection. 
6be0: 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73   If any previous
6bf0: 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68   functions of th
6c00: 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20  e same name..   
6c10: 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61     // were alrea
6c20: 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74  dy bound, then t
6c30: 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20  he new bindings 
6c40: 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e  replace the old.
6c50: 0d 0a 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e  ..      if ((con
6c60: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53  nectionFlags & S
6c70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6c80: 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74  lags.NoBindFunct
6c90: 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43  ions) != SQLiteC
6ca0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
6cb0: 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d  oBindFunctions).
6cc0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
6cd0: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
6ce0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
6cf0: 20 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63             _func
6d00: 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74  tions = new Dict
6d10: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
6d20: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
6d30: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
6d40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6d50: 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75  foreach (KeyValu
6d60: 65 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e 63  ePair<SQLiteFunc
6d70: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53  tionAttribute, S
6d80: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 70  QLiteFunction> p
6d90: 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  air..           
6da0: 20 20 20 20 20 20 20 69 6e 20 53 51 4c 69 74 65         in SQLite
6db0: 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e  Function.BindFun
6dc0: 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e  ctions(this, con
6dd0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 29 0d 0a  nectionFlags))..
6de0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6df0: 20 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63             _func
6e00: 74 69 6f 6e 73 5b 70 61 69 72 2e 4b 65 79 5d 20  tions[pair.Key] 
6e10: 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 20  = pair.Value;.. 
6e20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74    }....      Set
6e40: 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20  Timeout(0);..   
6e50: 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28     GC.KeepAlive(
6e60: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
6e70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6e80: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61  erride void Clea
6e90: 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  rPool()..    {..
6ea0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
6eb0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72  ectionPool.Clear
6ec0: 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b  Pool(_fileName);
6ed0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6ee0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6ef0: 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29   int CountPool()
6f00: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6f10: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
6f20: 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20  ng, int> counts 
6f30: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
6f40: 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d   int openCount =
6f50: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0;..        int
6f60: 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b   closeCount = 0;
6f70: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f  ..        int to
6f80: 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d  talCount = 0;...
6f90: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
6fa0: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65  onnectionPool.Ge
6fb0: 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d  tCounts(_fileNam
6fc0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6fd0: 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20  ref counts, ref 
6fe0: 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63  openCount, ref c
6ff0: 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  loseCount,..    
7000: 20 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61          ref tota
7010: 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  lCount);....    
7020: 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c      return total
7030: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Count;..    }...
7040: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7050: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
7060: 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65  imeout(int nTime
7070: 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20  outMS)..    {.. 
7080: 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d       IntPtr db =
7090: 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20 69 66   _sql;..      if
70a0: 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a   (db == IntPtr.Z
70b0: 65 72 6f 29 20 74 68 72 6f 77 20 6e 65 77 20 53  ero) throw new S
70c0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
70d0: 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  no connection ha
70e0: 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29  ndle available")
70f0: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
7100: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7110: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7120: 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69  .sqlite3_busy_ti
7130: 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d 65 6f  meout(db, nTimeo
7140: 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66  utMS);..      if
7150: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
7160: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
7170: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7180: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
7190: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
71a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
71b0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
71c0: 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ep(SQLiteStateme
71d0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
71e0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
71f0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20  orCode n;..     
7200: 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75   Random rnd = nu
7210: 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  ll;..      uint 
7220: 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e  starttick = (uin
7230: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
7240: 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ckCount;..      
7250: 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28  uint timeout = (
7260: 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d  uint)(stmt._comm
7270: 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65  and._commandTime
7280: 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a  out * 1000);....
7290: 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65        ResetCance
72a0: 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  lCount();....   
72b0: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
72c0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
72d0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
72e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
72f0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
7300: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7310: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
7320: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
7330: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
7340: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7350: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
7360: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7370: 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e  lite3_step(stmt.
7380: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
7390: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
73a0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
73b0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
73c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
73d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
73e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
73f0: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
7400: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
7410: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7420: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
7430: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
7440: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7450: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
7460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7470: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
7480: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
7490: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
74a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
74b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
74c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
74d0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
74e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
74f0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
7500: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
7510: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
7520: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
7530: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7540: 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72  e.Row) return tr
7550: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ue;..        if 
7560: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
7570: 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75  rCode.Done) retu
7580: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
7590: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
75a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
75b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
75c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
75d0: 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20  rorCode r;....  
75e0: 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72          // An er
75f0: 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74  ror occurred, at
7600: 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74  tempt to reset t
7610: 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  he statement.  I
7620: 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b  f the reset work
7630: 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a  ed because the..
7640: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68            // sch
7650: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ema has changed,
7660: 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70   re-try the step
7670: 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65   again.  If it e
7680: 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75  rrored our becau
7690: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d  se the database.
76a0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73  .          // is
76b0: 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65   locked, then ke
76c0: 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69  ep retrying unti
76d0: 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69  l the command ti
76e0: 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20  meout occurs... 
76f0: 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73           r = Res
7700: 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  et(stmt);....   
7710: 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20         if (r == 
7720: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7730: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
7740: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7750: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
7760: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
7780: 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74   if ((r == SQLit
7790: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
77a0: 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65  d || r == SQLite
77b0: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
77c0: 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  && stmt._command
77d0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
77e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
77f0: 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69      // Keep tryi
7800: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
7810: 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29  if (rnd == null)
7820: 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77   // First time w
7830: 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64  e've encountered
7840: 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20   the lock..     
7850: 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e           rnd = n
7860: 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a  ew Random();....
7870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49              // I
7880: 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64  f we've exceeded
7890: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74   the command's t
78a0: 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20  imeout, give up 
78b0: 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72  and throw an err
78c0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
78d0: 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f  if ((uint)Enviro
78e0: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20  nment.TickCount 
78f0: 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69  - starttick > ti
7900: 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20  meout)..        
7910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7920: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7930: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
7940: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
7950: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7960: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
7970: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
7980: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7990: 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73    // Otherwise s
79a0: 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f  leep for a rando
79b0: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
79c0: 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20   up to 150ms..  
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
79e0: 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72  em.Threading.Thr
79f0: 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65  ead.Sleep(rnd.Ne
7a00: 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20  xt(1, 150));..  
7a10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7a20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7a30: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
7a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
7a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
7a60: 2f 20 48 61 73 20 74 68 65 20 73 71 6c 69 74 65  / Has the sqlite
7a70: 33 5f 65 72 72 73 74 72 28 29 20 63 6f 72 65 20  3_errstr() core 
7a80: 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65 6e  library API been
7a90: 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74   checked for yet
7aa0: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f  ?..    /// If so
7ab0: 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f  , is it present?
7ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7ad0: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
7ae0: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68  e static bool? h
7af0: 61 76 65 5f 65 72 72 73 74 72 20 3d 20 6e 75 6c  ave_errstr = nul
7b00: 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  l;....    /// <s
7b10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7b20: 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 72 72   Returns the err
7b30: 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74  or message for t
7b40: 68 65 20 73 70 65 63 69 66 69 65 64 20 53 51 4c  he specified SQL
7b50: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
7b60: 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  using..    /// t
7b70: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
7b80: 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61  r() function, fa
7b90: 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20 74 68  lling back to th
7ba0: 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75  e internal looku
7bb0: 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65  p..    /// table
7bc0: 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a   if necessary...
7bd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7be0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
7bf0: 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65  am name="rc">The
7c00: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
7c10: 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ode.</param>..  
7c20: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
7c30: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
7c40: 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63   or null if it c
7c50: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c  annot be found.<
7c60: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
7c70: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
7c80: 74 72 69 6e 67 20 47 65 74 45 72 72 6f 72 53 74  tring GetErrorSt
7c90: 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f 72  ring(SQLiteError
7ca0: 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b 0d  Code rc)..    {.
7cb0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
7cc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7cd0: 20 20 20 20 20 69 66 20 28 68 61 76 65 5f 65 72       if (have_er
7ce0: 72 73 74 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rstr == null).. 
7cf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
7d10: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
7d20: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
7d30: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
7d40: 20 20 20 20 20 20 20 20 68 61 76 65 5f 65 72 72          have_err
7d50: 73 74 72 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75  str = (versionNu
7d60: 6d 62 65 72 20 3e 3d 20 33 30 30 37 30 31 35 29  mber >= 3007015)
7d70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7d90: 69 66 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 65  if ((bool)have_e
7da0: 72 72 73 74 72 29 0d 0a 20 20 20 20 20 20 20 20  rrstr)..        
7db0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7dc0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74         IntPtr pt
7dd0: 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  r = UnsafeNative
7de0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7df0: 65 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a 20  errstr(rc);.... 
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7e10: 66 20 28 70 74 72 20 21 3d 20 49 6e 74 50 74 72  f (ptr != IntPtr
7e20: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
7e30: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
7e40: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7e50: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7e70: 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74  eturn Marshal.Pt
7e80: 72 54 6f 53 74 72 69 6e 67 41 6e 73 69 28 70 74  rToStringAnsi(pt
7e90: 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
7ec0: 69 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a 23  ing(ptr, -1);..#
7ed0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
7ee0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7ef0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7f00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63   }..        catc
7f10: 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74  h (EntryPointNot
7f20: 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d  FoundException).
7f30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7f40: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
7f50: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
7f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
7f70: 75 72 6e 20 46 61 6c 6c 62 61 63 6b 47 65 74 45  urn FallbackGetE
7f80: 72 72 6f 72 53 74 72 69 6e 67 28 72 63 29 3b 0d  rrorString(rc);.
7f90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
7fa0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7fb0: 20 2f 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c   /// Has the sql
7fc0: 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  ite3_stmt_readon
7fd0: 6c 79 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72  ly() core librar
7fe0: 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b  y API been check
7ff0: 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20  ed for yet?..   
8000: 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69   /// If so, is i
8010: 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20  t present?..    
8020: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8030: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
8040: 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 73 74  ic bool? have_st
8050: 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 6e 75  mt_readonly = nu
8060: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ll;....    /// <
8070: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8080: 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  / Returns non-ze
8090: 72 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66  ro if the specif
80a0: 69 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ied statement is
80b0: 20 72 65 61 64 2d 6f 6e 6c 79 20 69 6e 20 6e 61   read-only in na
80c0: 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ture...    /// <
80d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
80e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
80f0: 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d  stmt">The statem
8100: 65 6e 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ent to check.</p
8110: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8120: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
8130: 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 20  the outer query 
8140: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 72  is read-only.</r
8150: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
8160: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
8170: 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d  ool IsReadOnly(.
8180: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
8190: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 0d 0a 20  tatement stmt.. 
81a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
81b0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
81c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
81d0: 20 20 20 20 20 69 66 20 28 68 61 76 65 5f 73 74       if (have_st
81e0: 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 3d 20 6e  mt_readonly == n
81f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8210: 20 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e       int version
8220: 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56  Number = SQLiteV
8230: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20  ersionNumber;.. 
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
8250: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
8260: 79 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62  y = (versionNumb
8270: 65 72 20 3e 3d 20 33 30 30 37 30 30 34 29 3b 0d  er >= 3007004);.
8280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
82a0: 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 73 74 6d   ((bool)have_stm
82b0: 74 5f 72 65 61 64 6f 6e 6c 79 29 0d 0a 20 20 20  t_readonly)..   
82c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
82e0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
82f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
8300: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a 20  tmt_readonly(.. 
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f     stmt._sqlite_
8330: 73 74 6d 74 29 20 21 3d 20 30 3b 0d 0a 20 20 20  stmt) != 0;..   
8340: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8350: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
8360: 61 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74  atch (EntryPoint
8370: 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f  NotFoundExceptio
8380: 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n)..        {.. 
8390: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
83a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
83b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
83c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 20 2f 2a  return false; /*
83d0: 20 4e 4f 54 45 3a 20 55 6e 6b 6e 6f 77 6e 2c 20   NOTE: Unknown, 
83e0: 61 73 73 75 6d 65 20 66 61 6c 73 65 2e 20 2a 2f  assume false. */
83f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8400: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8410: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8420: 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61   Reset(SQLiteSta
8430: 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20  tement stmt)..  
8440: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
8450: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
8460: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8470: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
8480: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8490: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
84a0: 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  et_interop(stmt.
84b0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
84c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
84d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
84e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
84f0: 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  et(stmt._sqlite_
8500: 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  stmt);..#endif..
8510: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68  ..      // If th
8520: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64  e schema changed
8530: 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65  , try and re-pre
8540: 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69  pare it..      i
8550: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
8560: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d  rorCode.Schema).
8570: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
8580: 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20    // Recreate a 
8590: 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d  dummy statement.
85a0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
85b0: 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  str = null;..   
85c0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
85d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
85e0: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
85f0: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
8600: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
8610: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
8620: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
8630: 20 31 30 30 30 29 2c 20 72 65 66 20 73 74 72 29   1000), ref str)
8640: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8650: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
8660: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
8670: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
8680: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
8690: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
86a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
86b0: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
86c0: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
86d0: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
86e0: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
86f0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
8700: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ne..          if
8710: 20 28 74 6d 70 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (tmp != null)..
8720: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8730: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
8740: 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70  qlite_stmt = tmp
8750: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
8760: 20 20 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e              tmp.
8770: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e  _sqlite_stmt = n
8780: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
8790: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  }....          /
87a0: 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65  / Reapply parame
87b0: 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ters..          
87c0: 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74  stmt.BindParamet
87d0: 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
87e0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
87f0: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
8800: 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65  e.Unknown; // Re
8810: 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74 68  set was OK, with
8820: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a   schema change..
8830: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
8840: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
8850: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
8860: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
8870: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
8880: 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
8890: 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  n n;....      if
88a0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
88b0: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
88c0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
88d0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
88e0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
88f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
8900: 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65 74  n n; // We reset
8910: 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63   OK, no schema c
8920: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d  hanges..    }...
8930: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8940: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
8950: 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20  tLastError()..  
8960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
8970: 75 72 6e 20 47 65 74 4c 61 73 74 45 72 72 6f 72  urn GetLastError
8980: 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (null);..    }..
8990: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
89a0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
89b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 73 74 72 69  etLastError(stri
89c0: 6e 67 20 64 65 66 56 61 6c 75 65 29 0d 0a 20 20  ng defValue)..  
89d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72    {..        str
89e0: 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 53 51 4c  ing result = SQL
89f0: 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45  iteBase.GetLastE
8a00: 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  rror(_sql, _sql)
8a10: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
8a20: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
8a30: 70 74 79 28 72 65 73 75 6c 74 29 29 20 72 65 73  pty(result)) res
8a40: 75 6c 74 20 3d 20 64 65 66 56 61 6c 75 65 3b 0d  ult = defValue;.
8a50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8a60: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a  result;..    }..
8a70: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
8ae0: 67 69 6f 6e 20 51 75 65 72 79 20 44 69 61 67 6e  gion Query Diagn
8af0: 6f 73 74 69 63 73 20 53 75 70 70 6f 72 74 0d 0a  ostics Support..
8b00: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
8b10: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
8b20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8b30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
8b40: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f  field is used to
8b50: 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 77   keep track of w
8b60: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
8b70: 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 53 51 4c 69  e..    /// "SQLi
8b80: 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  te_ForceLogPrepa
8b90: 72 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  re" environment 
8ba0: 76 61 72 69 61 62 6c 65 20 68 61 73 20 62 65 65  variable has bee
8bb0: 6e 20 71 75 65 72 69 65 64 2e 20 20 49 66 20 73  n queried.  If s
8bc0: 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 77  o,..    /// it w
8bd0: 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 6e 6f 6e 2d  ill only be non-
8be0: 7a 65 72 6f 20 69 66 20 74 68 65 20 65 6e 76 69  zero if the envi
8bf0: 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
8c00: 20 77 61 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20   was present... 
8c10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8c20: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
8c30: 74 61 74 69 63 20 62 6f 6f 6c 3f 20 66 6f 72 63  tatic bool? forc
8c40: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 6e 75  eLogPrepare = nu
8c50: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ll;....    /////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8cc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8cd0: 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
8ce0: 6e 65 73 20 69 66 20 61 6c 6c 20 63 61 6c 6c 73  nes if all calls
8cf0: 20 74 6f 20 70 72 65 70 61 72 65 20 61 20 53 51   to prepare a SQ
8d00: 4c 20 71 75 65 72 79 20 77 69 6c 6c 20 62 65 20  L query will be 
8d10: 6c 6f 67 67 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  logged,..    ///
8d20: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
8d30: 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  he flags for the
8d40: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
8d50: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
8d60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8d70: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
8d80: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
8d90: 20 74 6f 20 6c 6f 67 20 61 6c 6c 20 63 61 6c 6c   to log all call
8da0: 73 20 74 6f 20 70 72 65 70 61 72 65 20 61 20 53  s to prepare a S
8db0: 51 4c 20 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f  QL query...    /
8dc0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
8dd0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8de0: 63 20 62 6f 6f 6c 20 46 6f 72 63 65 4c 6f 67 50  c bool ForceLogP
8df0: 72 65 70 61 72 65 28 29 0d 0a 20 20 20 20 7b 0d  repare()..    {.
8e00: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73  .        lock (s
8e10: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
8e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8e30: 20 69 66 20 28 66 6f 72 63 65 4c 6f 67 50 72 65   if (forceLogPre
8e40: 70 61 72 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pare == null).. 
8e50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8e70: 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65   (UnsafeNativeMe
8e80: 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69 6e 67  thods.GetSetting
8e90: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67  "SQLite_ForceLog
8ec0: 50 72 65 70 61 72 65 22 2c 20 6e 75 6c 6c 29 20  Prepare", null) 
8ed0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8ee0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f00: 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   forceLogPrepare
8f10: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
8f20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
8f40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8f50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8f60: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
8f70: 6f 67 50 72 65 70 61 72 65 20 3d 20 66 61 6c 73  ogPrepare = fals
8f80: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8f90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8fa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8fb0: 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c      return (bool
8fc0: 29 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  )forceLogPrepare
8fd0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
8fe0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
8ff0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9000: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9060: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
9070: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
9080: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
9090: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
90a0: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
90b0: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
90c0: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
90d0: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
90e0: 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20 73 74  S, ref string st
90f0: 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d  rRemain)..    {.
9100: 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69  .      if (!Stri
9110: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
9120: 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20  (strSql))..     
9130: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
9140: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
9150: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
9160: 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e   support the con
9170: 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74 65  cept of separate
9180: 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20   schemas..      
9190: 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e    //       in on
91a0: 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65 72  e database; ther
91b0: 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68  efore, remove th
91c0: 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61  e base schema na
91d0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  me..        //  
91e0: 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f       used to smo
91f0: 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20  oth integration 
9200: 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e  with the base .N
9210: 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20  ET Framework..  
9220: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
9230: 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20  ata classes...  
9240: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9250: 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63 68    string baseSch
9260: 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21  emaName = (cnn !
9270: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62  = null) ? cnn._b
9280: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20  aseSchemaName : 
9290: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
92a0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
92b0: 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53  ullOrEmpty(baseS
92c0: 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20  chemaName))..   
92d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
92e0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
92f0: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
9300: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
9310: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
9320: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
9330: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
9340: 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62       "[{0}].", b
9350: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
9360: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
9370: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
9380: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
9390: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
93a0: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
93b0: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
93c0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
93d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
93e0: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
93f0: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
9400: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
9410: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
9420: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
9430: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
9440: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
9450: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
9460: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
9470: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
9480: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  efault;....     
9490: 20 69 66 20 28 0d 0a 23 69 66 20 21 50 4c 41 54   if (..#if !PLAT
94a0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
94b0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
94c0: 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   ForceLogPrepare
94d0: 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20  () ||..#endif.. 
94e0: 20 20 20 20 20 20 20 20 20 28 28 66 6c 61 67 73           ((flags
94f0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
9500: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
9510: 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  are) == SQLiteCo
9520: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
9530: 67 50 72 65 70 61 72 65 29 29 0d 0a 20 20 20 20  gPrepare))..    
9540: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
9550: 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75  f ((strSql == nu
9560: 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c  ll) || (strSql.L
9570: 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28  ength == 0) || (
9580: 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65  strSql.Trim().Le
9590: 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20  ngth == 0))..   
95a0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
95b0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
95c0: 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74  "Preparing {<not
95d0: 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20  hing>}...");..  
95e0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
9600: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
9610: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
9620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9630: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
9640: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22  urrentCulture, "
9650: 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d  Preparing {{{0}}
9660: 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b  }...", strSql));
9670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
9680: 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d     IntPtr stmt =
9690: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
96a0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
96b0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
96c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
96d0: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
96e0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51  ErrorCode n = SQ
96f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
9700: 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74  hema;..      int
9710: 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20   retries = 0;.. 
9720: 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d 75 6d       int maximum
9730: 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e 20 21  Retries = (cnn !
9740: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 70  = null) ? cnn._p
9750: 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3a 20  repareRetries : 
9760: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9770: 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72 65 52  .DefaultPrepareR
9780: 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20 20 62  etries;..      b
9790: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
97a0: 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20  (strSql);..     
97b0: 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73   string typedefs
97c0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
97d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
97e0: 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  cmd = null;..   
97f0: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
9800: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
9810: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
9820: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
9830: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  TickCount;....  
9840: 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c 43      ResetCancelC
9850: 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ount();....     
9860: 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65   GCHandle handle
9870: 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f   = GCHandle.Allo
9880: 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70  c(b, GCHandleTyp
9890: 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20  e.Pinned);..    
98a0: 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20    IntPtr psql = 
98b0: 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e  handle.AddrOfPin
98c0: 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  nedObject();..  
98d0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
98e0: 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d  entHandle statem
98f0: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  entHandle = null
9900: 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20  ;..      try..  
9910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77      {..        w
9920: 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69  hile ((n == SQLi
9930: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
9940: 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ma || n == SQLit
9950: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
9960: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
9970: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
9980: 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d 61 78  && retries < max
9990: 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a 20 20  imumRetries)..  
99a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
99b0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
99c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
99d0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
99e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
99f0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
9a00: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
9a10: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
9a20: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
9a30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9a40: 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a   stmt = IntPtr.Z
9a50: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
9a60: 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a    ptr = IntPtr.Z
9a70: 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ero;....#if !SQL
9a80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9a90: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
9aa0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
9ab0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9ac0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ad0: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
9ae0: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
9af0: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
9b00: 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72 65 66  mt, ref ptr, ref
9b10: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
9b20: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
9b30: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
9b40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9b50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
9b60: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
9b70: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
9b80: 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65   1, ref stmt, re
9b90: 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f ptr);..#else..
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
9bb0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9bc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
9bd0: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
9be0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
9bf0: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29  f stmt, ref ptr)
9c00: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9c10: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
9c20: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
9c30: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
9c40: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
9c50: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
9c60: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
9c70: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50  String.Format("P
9c80: 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31  repare ({0}): {1
9c90: 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a  }", n, stmt));..
9ca0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
9cb0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
9cc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9cd0: 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20  Ok) && (stmt != 
9ce0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
9cf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9d10: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
9d20: 21 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65  != null) stateme
9d30: 6e 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65  ntHandle.Dispose
9d40: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
9d50: 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64     statementHand
9d60: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  le = new SQLiteS
9d70: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f  tatementHandle(_
9d80: 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20  sql, stmt);..   
9d90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9da0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9db0: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
9dc0: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
9dd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
9df0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
9e00: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
9e10: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
9e20: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
9e30: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
9e40: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
9e50: 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
9e60: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
9e80: 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65  l, null, stateme
9e90: 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c  ntHandle, strSql
9ea0: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
9eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ec0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
9ed0: 20 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72   cnn, strSql, pr
9ee0: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
9ef0: 53 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  S }));..        
9f00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9f10: 20 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77   if (ShouldThrow
9f20: 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20  ForCancel())..  
9f30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9f40: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
9f50: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9f60: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
9f80: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9f90: 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20  de.Row) ||..    
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
9fb0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9fc0: 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20  ode.Done))..    
9fd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9ff0: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
a000: 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20  de.Interrupt;.. 
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a030: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
a040: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
a050: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  l);..          }
a060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
a070: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
a080: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
a090: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  )..            b
a0a0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
a0b0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
a0c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
a0d0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20  chema)..        
a0e0: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
a0f0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
a100: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
a110: 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a  rorCode.Error)..
a120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a130: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
a140: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
a150: 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61  astError(), "nea
a160: 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e  r \"TYPES\": syn
a170: 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69  tax error", Stri
a180: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
a190: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
a1a0: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
a1b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a1c0: 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74      int pos = st
a1d0: 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27  rSql.IndexOf(';'
a1e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a1f0: 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29    if (pos == -1)
a200: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65   pos = strSql.Le
a210: 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20  ngth - 1;....   
a220: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64             typed
a230: 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  efs = strSql.Sub
a240: 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20  string(0, pos + 
a250: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
a260: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
a270: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73  ql.Substring(pos
a280: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
a290: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
a2a0: 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20  n = "";....     
a2b0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
a2c0: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
a2d0: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
a2e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a2f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a300: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
a310: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
a320: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
a330: 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69  MS, ref strRemai
a340: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
a350: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
a360: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
a370: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a380: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
a390: 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  md != null)..   
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
a3b0: 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65  .SetTypes(typede
a3c0: 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fs);....        
a3d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
a3e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a3f0: 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c  ..#if (NET_35 ||
a400: 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34   NET_40 || NET_4
a410: 35 20 7c 7c 20 4e 45 54 5f 34 35 31 29 20 26 26  5 || NET_451) &&
a420: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a430: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a440: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
a450: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
a460: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
a470: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
a480: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
a490: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
a4a0: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
a4b0: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
a4c0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
a4d0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a500: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20  Remain = "";..  
a510: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
a520: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
a530: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
a540: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
a550: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a560: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
a570: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
a580: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
a590: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
a5a0: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
a5b0: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
a5c0: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
a5d0: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
a5e0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
a5f0: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a610: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a630: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
a640: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
a660: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
a670: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
a680: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
a690: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
a6b0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
a6c0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
a6d0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
a6e0: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
a710: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
a720: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a730: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a740: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
a750: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a760: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
a780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a790: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
a7a0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
a7b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a7c0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
a7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
a7e0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
a7f0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
a800: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
a810: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
a820: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
a830: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
a840: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
a850: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
a860: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a870: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
a880: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
a890: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
a8a0: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
a8b0: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
a8c0: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
a8e0: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a900: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
a910: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
a920: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
a930: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
a940: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
a950: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
a960: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
a970: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
a980: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
a990: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a9a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
a9b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
a9c0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
a9d0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
a9e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a9f0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
aa00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aa10: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
aa20: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
aa30: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
aa40: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
aa50: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
aa60: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
aa70: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
aa80: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
aa90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
aaa0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
aab0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
aac0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
aad0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
aae0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
aaf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
ab00: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
ab10: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
ab20: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
ab30: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ab40: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
ab50: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
ab60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ab70: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
ab80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ab90: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
aba0: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
abb0: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
abc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
abd0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
abe0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
abf0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
ac00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
ac10: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
ac20: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
ac30: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
ac40: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
ac50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ac60: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
ac70: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
ac80: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
ac90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
aca0: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
acb0: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
acc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
acd0: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
ace0: 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20   != null) cmd = 
acf0: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
ad00: 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c  ent(this, flags,
ad10: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
ad20: 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  , strSql.Substri
ad30: 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e  ng(0, strSql.Len
ad40: 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e  gth - strRemain.
ad50: 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75  Length), previou
ad60: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  s);....        r
ad70: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
ad80: 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c    }..      final
ad90: 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ly..      {..   
ada0: 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65       handle.Free
adb0: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
adc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
add0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
ade0: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
adf0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
ae00: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
ae10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ae20: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
ae30: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
ae40: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
ae50: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
ae60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
ae80: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
ae90: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
aea0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
aeb0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
aec0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
aed0: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
aee0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
aef0: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
af00: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
af10: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
af20: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
af30: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
af40: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
af50: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
af60: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
af70: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
af80: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
af90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
afa0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
afb0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
afc0: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
afd0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
afe0: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
aff0: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
b000: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
b010: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
b020: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
b030: 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54  ndex, value.GetT
b040: 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d  ype(), value));.
b050: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
b060: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
b070: 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69  ing FormatDateTi
b080: 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75  me(DateTime valu
b090: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
b0a0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
b0b0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
b0c0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
b0d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
b0e0: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f  .Append(value.To
b0f0: 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d  String("yyyy-MM-
b100: 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  ddTHH:mm:ss.FFFF
b110: 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20  FFFK"));..      
b120: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
b130: 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ' ');..        r
b140: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
b150: 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  ue.Kind);..     
b160: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
b170: 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (' ');..        
b180: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
b190: 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20  lue.Ticks);.... 
b1a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
b1b0: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
b1c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
b1d0: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
b1e0: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
b1f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
b200: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
b210: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76  ndex, DateTime v
b220: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
b230: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
b240: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
b250: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
b260: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
b270: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
b280: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
b290: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
b2a0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
b2b0: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
b2c0: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
b2d0: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
b2e0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
b2f0: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
b300: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72  f(DateTime), For
b310: 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75  matDateTime(valu
b320: 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  e)));..    }....
b330: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
b340: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
b350: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
b360: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
b370: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
b380: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
b390: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
b3a0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
b3b0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
b3c0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
b3d0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
b3e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
b3f0: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
b400: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
b410: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
b420: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
b430: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
b440: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
b450: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
b460: 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76  peof(String), (v
b470: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
b480: 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22  value : "<null>"
b490: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
b4a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b4b0: 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65   string ToHexade
b4c0: 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20  cimalString(..  
b4d0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72        byte[] arr
b4e0: 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ay..        ).. 
b4f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
b500: 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29   (array == null)
b510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
b520: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
b530: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
b540: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
b550: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61   StringBuilder(a
b560: 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29  rray.Length * 2)
b570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
b580: 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e   length = array.
b590: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
b5a0: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
b5b0: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
b5c0: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
b5e0: 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79  ult.Append(array
b5f0: 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67  [index].ToString
b600: 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  ("x2"));....    
b610: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
b620: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
b630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
b640: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
b650: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
b660: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
b670: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
b680: 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  x, byte[] value)
b690: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
b6a0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
b6b0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
b6c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b6d0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
b6e0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
b700: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
b710: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
b720: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
b730: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
b740: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
b750: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
b760: 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74  ndex, typeof(Byt
b770: 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20  e[]), (value != 
b780: 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65  null) ? ToHexade
b790: 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75  cimalString(valu
b7a0: 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  e) : "<null>"));
b7b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b7c0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b7d0: 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c   void Bind_Doubl
b7e0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
b7f0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
b800: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
b810: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
b820: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
b830: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
b840: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
b850: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
b860: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
b870: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
b880: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
b890: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
b8a0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
b8b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
b8c0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
b8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b8e0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
b8f0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
b900: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69  .        }....#i
b910: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
b920: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b930: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
b940: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
b950: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b960: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
b970: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  e(handle, index,
b980: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
b990: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b9a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b9b0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
b9c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b9d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
b9e0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
b9f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
ba00: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
ba10: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
ba20: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
ba30: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
ba40: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
ba50: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ba60: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ba70: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ba80: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ba90: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
baa0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bab0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
bac0: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
bad0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
bae0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
baf0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
bb00: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
bb10: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
bb20: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
bb30: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
bb40: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
bb50: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
bb60: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
bb70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
bb80: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
bb90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bba0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
bbb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bbc0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
bbd0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
bbe0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
bbf0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
bc00: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
bc10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bc20: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
bc30: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
bc40: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
bc50: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
bc60: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
bc70: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
bc80: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
bc90: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
bca0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bcb0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
bcc0: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28  oid Bind_UInt32(
bcd0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
bce0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
bcf0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
bd00: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69  s, int index, ui
bd10: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
bd20: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
bd30: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
bd40: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
bd50: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
bd60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
bd70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
bd80: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
bd90: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
bda0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
bdb0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
bdc0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
bdd0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
bde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
bdf0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
be00: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
be10: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
be20: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
be30: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
be40: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
be50: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
be60: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
be70: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d  Int32AsInt64) ==
be80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
be90: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
bea0: 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20  2AsInt64)..     
beb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bec0: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20    long value2 = 
bed0: 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50  value;....#if !P
bee0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
bef0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
bf00: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
bf10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bf20: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
bf30: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
bf40: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20  value2);..#elif 
bf50: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
bf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
bf70: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
bf80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
bf90: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
bfa0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
bfb0: 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ref value2);..#e
bfc0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
bfd0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
bfe0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
bff0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
c000: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c010: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
c020: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
c030: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c040: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
c050: 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c  ind_uint(handle,
c060: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c070: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c080: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c090: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c0a0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c0b0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c0c0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c0e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c0f0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53  oid Bind_Int64(S
c100: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
c110: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
c120: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
c130: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e  , int index, lon
c140: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
c150: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
c160: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
c170: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
c180: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
c190: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
c1a0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
c1b0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
c1c0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
c1d0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c1e0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
c1f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
c200: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
c210: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
c220: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
c230: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
c240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c250: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c260: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c270: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c280: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
c290: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
c2a0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
c2b0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
c2c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c2d0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
c2e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c2f0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
c300: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
c310: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
c320: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c330: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
c340: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
c350: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
c360: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
c370: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c380: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
c390: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c3a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
c3b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c3c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c3d0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
c3e0: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
c3f0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
c400: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
c410: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
c420: 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  , ulong value)..
c430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
c440: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
c450: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
c460: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
c470: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
c480: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
c490: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
c4a0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
c4b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
c4c0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
c4d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c4e0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
c4f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c500: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
c510: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
c520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
c530: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
c540: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
c550: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c560: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
c570: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
c580: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
c590: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
c5a0: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
c5b0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
c5c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c5d0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
c5e0: 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  uint64_interop(h
c5f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
c600: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
c610: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
c620: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
c630: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
c640: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
c650: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c660: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c670: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c680: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c690: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
c6a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c6b0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c6c0: 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65  Bind_Text(SQLite
c6d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c6e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c6f0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
c700: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
c710: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
c720: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
c730: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
c740: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
c750: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
c760: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
c770: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
c780: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
c790: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c7a0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
c7b0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
c7c0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
c7d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c7e0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
c7f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
c800: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
c810: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
c820: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
c830: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
c840: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
c850: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c860: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
c870: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c880: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c890: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c8a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c8b0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c8c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c8d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c8e0: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
c8f0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
c900: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c910: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
c920: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c930: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
c940: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
c950: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
c960: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
c970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
c980: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c990: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
c9a0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
c9b0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
c9c0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
c9d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c9e0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
c9f0: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
ca00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ca10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ca20: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
ca30: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
ca40: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
ca50: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
ca60: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
ca70: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
ca80: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
ca90: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
caa0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
cab0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
cac0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cad0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
cae0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
caf0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
cb00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cb10: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
cb20: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64  handle, index, d
cb30: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
cb40: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
cb50: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
cb60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cb70: 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d  lags.BindDateTim
cb80: 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53 51  eWithKind) == SQ
cb90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
cba0: 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65  ags.BindDateTime
cbb0: 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20 20  WithKind)..     
cbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cbd0: 20 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d 65    if ((_datetime
cbe0: 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65  Kind != DateTime
cbf0: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
cc00: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
cc10: 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21        (dt.Kind !
cc20: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
cc30: 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a  nspecified) &&..
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61 74  (dt.Kind != _dat
cc60: 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20 20  etimeKind))..   
cc70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
cc90: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d  _datetimeKind ==
cca0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74   DateTimeKind.Ut
ccb0: 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c)..            
ccc0: 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e          dt = dt.
ccd0: 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 28  ToUniversalTime(
cce0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ccf0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
cd00: 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61  tetimeKind == Da
cd10: 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c  teTimeKind.Local
cd20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cd30: 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54         dt = dt.T
cd40: 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a 20  oLocalTime();.. 
cd50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
cd60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cd70: 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65     switch (_date
cd80: 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20  timeFormat)..   
cd90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cda0: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
cdb0: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
cdc0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
cdd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cde0: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
cdf0: 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b  alue = dt.Ticks;
ce00: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
ce10: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
ce20: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
ce30: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
ce40: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
ce50: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
ce60: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
ce70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ce80: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
ce90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
cec0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
ced0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
cee0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
cf10: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
cf20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cf30: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
cf40: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
cf50: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
cf60: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
cf90: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
cfa0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cfb0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
cfc0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
cfd0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
cfe0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
d000: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d010: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d020: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d040: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d050: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d060: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
d070: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
d080: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
d090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
d0a0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
d0b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d0c0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
d0d0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
d0e0: 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20  anDay:..        
d0f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
d110: 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f  ouble value = To
d120: 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a  JulianDay(dt);..
d130: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d140: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d160: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d170: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d180: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d190: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d1a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d1b0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
d1c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d1f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d200: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d210: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d230: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d240: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
d250: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d260: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
d270: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d280: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
d290: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d2c0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
d2d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d2e0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
d2f0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
d300: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
d310: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
d320: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
d330: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d340: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d350: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d370: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d380: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d390: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
d3a0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
d3b0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
d3d0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
d3e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d3f0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
d400: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
d410: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
d420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
d440: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
d450: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
d460: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
d470: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
d480: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
d490: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d4a0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
d4b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
d4c0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
d4d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d4e0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
d4f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d500: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
d510: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
d540: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d550: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
d560: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d590: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d5a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d5b0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
d5c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d5d0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
d5e0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d610: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d620: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d630: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
d640: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
d650: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
d660: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
d680: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
d690: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
d6a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d6c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
d6d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
d6e0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d6f0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d700: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d720: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
d730: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d740: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d770: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
d780: 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d  = ToUTF8(dt);...
d790: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d7a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d7c0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
d7d0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
d7e0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d7f0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
d800: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d810: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
d820: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d850: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d8a0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d8b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d8c0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
d8d0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
d8e0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
d8f0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d920: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d930: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d940: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d950: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
d980: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
d9a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d9b0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
d9c0: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
d9d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
d9e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d9f0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
da00: 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44  ex, byte[] blobD
da10: 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ata)..    {..   
da20: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
da30: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
da40: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
da50: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
da60: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
da70: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
da80: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
da90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
daa0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
dab0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dac0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
dad0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dae0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
daf0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
db00: 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  lobData);..     
db10: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
db20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
db30: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
db40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
db50: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
db60: 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  b(handle, index,
db70: 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44   blobData, blobD
db80: 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74  ata.Length, (Int
db90: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
dba0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
dbb0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
dbc0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
dbd0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
dbe0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
dbf0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
dc00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
dc10: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
dc20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
dc30: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
dc40: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
dc50: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
dc60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
dc70: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
dc80: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
dc90: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
dca0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
dcb0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
dcc0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
dcd0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
dce0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
dcf0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
dd00: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
dd10: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
dd20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
dd30: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
dd40: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
dd50: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
dd60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
dd70: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
dd80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
dd90: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68  ite3_bind_null(h
dda0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
ddb0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
ddc0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ddd0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
dde0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
ddf0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
de00: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
de10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
de20: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
de30: 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  mCount(SQLiteSta
de40: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
de50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
de60: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
de70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
de80: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
de90: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
dea0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
deb0: 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d       int value =
dec0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ded0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
dee0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
def0: 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  t(handle);....  
df00: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
df10: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
df20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
df30: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
df40: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
df50: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
df60: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
df70: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
df80: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
df90: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
dfa0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
dfb0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
dfd0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
dfe0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
dff0: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
e000: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
e010: 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e  er count is {1}.
e020: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
e030: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
e040: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
e050: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e060: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
e070: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e080: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
e090: 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d  tring Bind_Param
e0a0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
e0b0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
e0c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e0d0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
e0e0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
e0f0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
e100: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
e110: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
e120: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  tmt;..        st
e130: 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69  ring name;....#i
e140: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e150: 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  RD..        int 
e160: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
e170: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
e180: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
e190: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e1a0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
e1b0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61  _name_interop(ha
e1c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
e1d0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
e1e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d  lse..        nam
e1f0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
e200: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
e210: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
e220: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
e230: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c  (handle, index),
e240: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   -1);..#endif...
e250: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
e260: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
e270: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
e280: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
e290: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e2a0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
e2b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
e2c0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
e2d0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
e2f0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
e300: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
e310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e320: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
e330: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
e350: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
e360: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
e370: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
e390: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
e3a0: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
e3b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e3c0: 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a    return name;..
e3d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e3e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
e3f0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
e400: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
e410: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
e420: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
e430: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
e440: 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  amName)..    {..
e450: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
e460: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
e470: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
e480: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
e490: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55     int index = U
e4a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e4b0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
e4c0: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
e4d0: 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70  handle, ToUTF8(p
e4e0: 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  aramName));.... 
e4f0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
e500: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
e510: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
e520: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
e530: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
e540: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
e550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
e560: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
e570: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
e580: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e590: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
e5a0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
e5c0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
e5d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
e5f0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
e600: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
e610: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
e620: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
e630: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
e640: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
e650: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
e660: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
e670: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
e680: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e690: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
e6a0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
e6b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
e6c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e6d0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
e6e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e6f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
e700: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e710: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
e720: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e730: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
e740: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
e750: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
e760: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
e770: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
e780: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
e790: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49  en = 0;..      I
e7a0: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
e7b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e7c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
e7d0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
e7e0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
e7f0: 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
e800: 65 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50  else..      IntP
e810: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
e820: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e830: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
e840: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
e850: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
e860: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d  f..      if (p =
e870: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
e880: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e890: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
e8a0: 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n(SQLiteErrorCod
e8b0: 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74  e.NoMem, GetLast
e8c0: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21  Error());..#if !
e8d0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
e8e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
e8f0: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
e900: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
e910: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
e920: 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23  tring(p, -1);..#
e930: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
e940: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e950: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
e960: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
e970: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
e980: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
e990: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
e9a0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
e9b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e9c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
e9d0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e9e0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
e9f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ea00: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
ea10: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
ea20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
ea30: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65  t, int index, re
ea40: 66 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  f TypeAffinity n
ea50: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b  Affinity)..    {
ea60: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
ea70: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
ea80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 65  ANDARD..      le
ea90: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  n = 0;..      In
eaa0: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
eab0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
eac0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
ead0: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
eae0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
eaf0: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
eb00: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c  ..#else..      l
eb10: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
eb20: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
eb30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
eb40: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
eb50: 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
eb60: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
eb70: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
eb80: 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
eb90: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
eba0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
ebb0: 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50     if (p != IntP
ebc0: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
ebd0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
ebe0: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  len);..      els
ebf0: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
ec00: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20      string[] ar 
ec10: 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e  = stmt.TypeDefin
ec20: 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  itions;..       
ec30: 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
ec40: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ec50: 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
ec60: 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
ec70: 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
ec80: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ec90: 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d  return ar[index]
eca0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
ecb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
ecc0: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
ecd0: 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28        //switch (
ece0: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
ecf0: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
ed00: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
ed10: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
ed20: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
ed30: 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20  urn "BIGINT";.. 
ed40: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
ed50: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
ed60: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble:..        //
ed70: 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42      return "DOUB
ed80: 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  LE";..        //
ed90: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
eda0: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
edb0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
edc0: 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20  "BLOB";..       
edd0: 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20   //  default:.. 
ede0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
edf0: 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20  urn "TEXT";..   
ee00: 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20       //}..      
ee10: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
ee20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ee30: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  e int ColumnInde
ee40: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
ee50: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
ee60: 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20  olumnName)..    
ee70: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d  {..      int x =
ee80: 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d   ColumnCount(stm
ee90: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t);....      for
eea0: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
eeb0: 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
eec0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
eed0: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f  tring.Compare(co
eee0: 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e  lumnName, Column
eef0: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53  Name(stmt, n), S
ef00: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
ef10: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
ef20: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
ef30: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
ef40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
ef50: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d  turn -1;..    }.
ef60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ef70: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
ef80: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
ef90: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
efa0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
efb0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
efc0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
efd0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
efe0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
eff0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
f000: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f010: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
f020: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
f030: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
f040: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
f050: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
f060: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
f070: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
f080: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
f090: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f0a0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
f0b0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
f0c0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
f0d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
f0e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
f0f0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
f100: 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
f110: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
f120: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
f130: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
f140: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
f150: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
f160: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
f170: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
f180: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
f190: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
f1a0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
f1b0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
f1c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
f1d0: 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
f1e0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
f1f0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
f200: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
f210: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f220: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
f230: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
f240: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
f250: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
f260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f270: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
f280: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
f290: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
f2a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
f2b0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
f2c0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f2d0: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
f2e0: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
f2f0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
f300: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
f310: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f320: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
f330: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
f340: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
f350: 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
f360: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
f370: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
f380: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
f390: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f3a0: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
f3b0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
f3c0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
f3d0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f3e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f3f0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f400: 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
f410: 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
f420: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
f430: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66  ring column, ref
f440: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
f450: 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
f460: 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
f470: 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  f bool notNull, 
f480: 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  ref bool primary
f490: 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75  Key, ref bool au
f4a0: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
f4b0: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
f4c0: 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d 20  r dataTypePtr = 
f4d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
f4e0: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
f4f0: 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  eqPtr = IntPtr.Z
f500: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
f510: 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20  nnotNull = 0;.. 
f520: 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
f530: 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20  yKey = 0;..     
f540: 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20   int nautoInc = 
f550: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
f560: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
f570: 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
f580: 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
f590: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
f5a0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
f5b0: 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  dtLen = 0;..    
f5c0: 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    csLen = 0;..  
f5d0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
f5e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f5f0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
f600: 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
f610: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
f620: 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
f630: 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
f640: 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
f650: 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
f660: 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
f670: 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
f680: 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
f690: 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e  toInc, ref dtLen
f6a0: 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23  , ref csLen);..#
f6b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
f6c0: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
f6d0: 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
f6e0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
f6f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f700: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
f710: 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
f720: 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
f730: 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
f740: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
f750: 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
f760: 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
f770: 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
f780: 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
f790: 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   ref nautoInc);.
f7a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
f7b0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
f7c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
f7d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
f7e0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
f7f0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
f800: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
f810: 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
f820: 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
f830: 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
f840: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
f850: 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
f860: 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
f870: 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
f880: 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
f890: 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
f8a0: 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
f8b0: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
f8c0: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
f8d0: 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
f8e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
f8f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
f900: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53  uble GetDouble(S
f910: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f920: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
f930: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
f940: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
f950: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
f960: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
f970: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
f980: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f990: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
f9a0: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
f9b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
f9c0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
f9d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76  TANDARD..      v
f9e0: 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20  alue = 0.0;..   
f9f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
fa00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
fa10: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
fa20: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
fa30: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
fa40: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
fa50: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
fa60: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
fa70: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
fa80: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
fa90: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
faa0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fab0: 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65  l override sbyte
fac0: 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65   GetSByte(SQLite
fad0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
fae0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
faf0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
fb00: 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65  unchecked((sbyte
fb10: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
fb20: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
fb30: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
fb40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fb50: 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  l override byte 
fb60: 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74  GetByte(SQLiteSt
fb70: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
fb80: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
fb90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
fba0: 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47  checked((byte)(G
fbb0: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
fbc0: 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56  dex) & byte.MaxV
fbd0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
fbe0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fbf0: 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65  verride short Ge
fc00: 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  tInt16(SQLiteSta
fc10: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
fc20: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
fc30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
fc40: 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47  hecked((short)(G
fc50: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
fc60: 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
fc70: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
fc80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fc90: 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74   override ushort
fca0: 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74   GetUInt16(SQLit
fcb0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
fcc0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
fcd0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
fce0: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f   unchecked((usho
fcf0: 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  rt)(GetInt32(stm
fd00: 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f  t, index) & usho
fd10: 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  rt.MaxValue));..
fd20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
fd30: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
fd40: 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  nt GetInt32(SQLi
fd50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
fd60: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
fd70: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
fd80: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
fd90: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
fda0: 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73  lumn_int(stmt._s
fdb0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
fdc0: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
fdd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fde0: 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74  ide uint GetUInt
fdf0: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
fe00: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
fe10: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
fe20: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
fe30: 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33  ed((uint)GetInt3
fe40: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  2(stmt, index));
fe50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
fe60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fe70: 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53   long GetInt64(S
fe80: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fe90: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
fea0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
feb0: 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  ng value;..#if !
fec0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
fed0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
fee0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
fef0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ff00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
ff10: 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
ff20: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
ff30: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
ff40: 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75  DARD..      valu
ff50: 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e  e = 0;..      Un
ff60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ff70: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ff80: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73  _int64_interop(s
ff90: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
ffa0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
ffb0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
ffc0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
ffd0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ffe0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
fff0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
10000 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
10010 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10020 72 69 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49  ride ulong GetUI
10030 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
10040 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10050 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
10060 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
10070 63 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49  cked((ulong)GetI
10080 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
10090 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
100a0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
100b0 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65  ide string GetTe
100c0 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  xt(SQLiteStateme
100d0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
100e0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
100f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10100 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10110 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10120 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10130 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10140 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10150 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
10160 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10170 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
10180 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
10190 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
101a0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
101b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
101c0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
101d0 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
101e0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a  _stmt, index),..
101f0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
10200 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10210 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
10220 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
10230 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65  mt, index));..#e
10240 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
10250 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10260 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65  ride DateTime Ge
10270 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  tDateTime(SQLite
10280 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
10290 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
102a0 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61  {..      if (_da
102b0 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
102c0 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
102d0 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20 20 20  s.Ticks)..      
102e0 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
102f0 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ime(GetInt64(stm
10300 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
10310 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  timeKind);..    
10320 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65    else if (_date
10330 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51  timeFormat == SQ
10340 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
10350 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20  JulianDay)..    
10360 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
10370 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28  eTime(GetDouble(
10380 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
10390 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
103a0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
103b0 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
103c0 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
103d0 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20  ts.UnixEpoch).. 
103e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
103f0 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 33  DateTime(GetInt3
10400 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  2(stmt, index), 
10410 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
10420 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
10430 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
10440 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
10450 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
10460 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
10470 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10480 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
10490 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
104a0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
104b0 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
104c0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
104d0 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
104e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
104f0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10500 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
10510 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
10520 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
10530 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10540 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
10550 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
10560 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
10570 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10580 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10590 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
105a0 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
105b0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
105c0 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
105d0 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
105e0 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
105f0 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
10600 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
10610 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
10620 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10630 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
10640 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
10650 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
10660 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
10670 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
10680 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
10690 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
106a0 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
106b0 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
106c0 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
106d0 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
106e0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
106f0 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
10700 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
10710 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
10720 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
10730 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
10740 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
10750 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
10760 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
10770 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
10780 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
10790 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
107a0 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
107b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
107c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
107d0 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71  mn_blob(stmt._sq
107e0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
107f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
10800 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
10810 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
10820 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
10830 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
10840 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
10850 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
10860 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
10870 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
10880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10890 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
108a0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
108b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
108c0 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
108d0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
108e0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
108f0 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
10900 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
10910 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
10920 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
10930 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
10940 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
10950 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
10960 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
10970 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
10980 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10990 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
109a0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
109b0 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
109c0 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
109d0 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
109e0 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
109f0 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
10a00 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
10a10 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
10a20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
10a30 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
10a40 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
10a50 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
10a60 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
10a70 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
10a80 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
10a90 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
10aa0 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
10ab0 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
10ac0 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
10ad0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
10ae0 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
10af0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10b00 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
10b10 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
10b20 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10b30 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
10b40 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
10b50 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
10b60 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
10b70 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
10b80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10b90 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
10ba0 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
10bb0 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
10bc0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10bd0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
10be0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10bf0 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
10c00 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
10c10 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10c20 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
10c30 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65  iteErrorCode Cre
10c40 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69  ateFunction(stri
10c50 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20  ng strFunction, 
10c60 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20  int nArgs, bool 
10c70 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c  needCollSeq, SQL
10c80 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
10c90 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
10ca0 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74   funcstep, SQLit
10cb0 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66  eFinalCallback f
10cc0 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63  uncfinal, bool c
10cd0 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
10ce0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
10cf0 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
10d00 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10d10 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
10d20 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10d30 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
10d40 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
10d50 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
10d60 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
10d70 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
10d80 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
10d90 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
10da0 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
10db0 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20  ue) ? 1 : 0);.. 
10dc0 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
10dd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
10de0 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
10df0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10e00 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
10e10 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
10e20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
10e30 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
10e40 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
10e50 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
10e60 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
10e70 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
10e80 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
10e90 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
10ea0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10eb0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
10ec0 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
10ed0 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
10ee0 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
10ef0 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
10f00 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
10f10 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
10f20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
10f30 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
10f40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10f50 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
10f60 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
10f70 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
10f80 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
10f90 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
10fa0 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
10fb0 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  al);..#endif..  
10fc0 20 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77      if (canThrow
10fd0 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   && (n != SQLite
10fe0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74  ErrorCode.Ok)) t
10ff0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
11000 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
11010 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
11020 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
11030 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11040 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
11050 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
11060 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
11070 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
11080 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
11090 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
110a0 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c  ollation func16,
110b0 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d   bool canThrow).
110c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
110d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
110e0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
110f0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
11100 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
11110 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
11120 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
11130 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
11140 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
11150 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
11160 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
11170 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11180 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
11190 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
111a0 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
111b0 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
111c0 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
111d0 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20     if (canThrow 
111e0 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  && (n != SQLiteE
111f0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68  rrorCode.Ok)) th
11200 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
11210 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
11220 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
11230 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
11240 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11250 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
11260 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
11270 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
11280 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
11290 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
112a0 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
112b0 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
112c0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
112d0 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
112e0 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
112f0 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
11300 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
11310 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
11320 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
11330 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
11340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
11350 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
11360 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
11370 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
11380 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
11390 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
113a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
113b0 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
113c0 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
113d0 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
113e0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
113f0 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
11400 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
11410 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
11420 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
11430 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
11440 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
11450 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
11460 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
11470 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
11480 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
11490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
114a0 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
114b0 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
114c0 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
114d0 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
114e0 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
114f0 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(s2);....     
11500 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
11510 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11520 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
11530 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
11540 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
11550 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
11560 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
11570 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11580 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
11590 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
115a0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
115b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
115c0 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
115d0 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
115e0 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
115f0 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
11600 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
11610 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20  1, char[] c2).. 
11620 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
11630 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11640 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
11650 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
11660 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
11670 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
11680 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
11690 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
116a0 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
116b0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
116c0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
116d0 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
116e0 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
116f0 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
11700 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
11710 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
11720 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
11730 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
11740 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
11750 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
11760 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
11770 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
11780 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
11790 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
117a0 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
117b0 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
117c0 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
117d0 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
117e0 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
117f0 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
11800 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
11810 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
11820 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
11830 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20  ytes(c1);..     
11840 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
11850 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d  GetBytes(c2);...
11860 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
11870 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11880 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
11890 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
118a0 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
118b0 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
118c0 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
118d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
118e0 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
118f0 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
11900 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
11910 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11920 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69  override Collati
11930 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
11940 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
11950 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
11960 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
11970 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ext)..    {..#if
11980 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
11990 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69  D..      Collati
119a0 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d  onSequence seq =
119b0 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65   new CollationSe
119c0 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20  quence();..     
119d0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
119e0 20 20 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20       int type = 
119f0 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e  0;..      int en
11a00 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  c = 0;..      In
11a10 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
11a20 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11a30 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
11a40 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
11a50 74 65 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20  text, ref type, 
11a60 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e  ref enc, ref len
11a70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
11a80 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
11a90 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
11aa0 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
11ab0 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
11ac0 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
11ad0 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
11ae0 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
11af0 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
11b00 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
11b10 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
11b20 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
11b30 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
11b40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
11b50 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
11b60 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
11b70 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
11b80 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11b90 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
11ba0 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
11bb0 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
11bc0 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
11bd0 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
11be0 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
11bf0 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
11c00 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
11c10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11c20 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
11c30 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
11c40 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
11c50 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
11c60 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
11c70 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
11c80 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
11c90 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
11ca0 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
11cb0 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
11cc0 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
11cd0 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
11ce0 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
11cf0 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
11d00 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
11d10 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
11d20 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
11d30 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
11d40 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
11d50 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
11d60 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
11d70 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
11d80 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
11d90 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11da0 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
11db0 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
11dc0 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
11dd0 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
11de0 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
11df0 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
11e00 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
11e10 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
11e20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
11e30 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
11e40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
11e50 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
11e60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11e70 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
11e80 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
11e90 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
11ea0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
11eb0 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
11ec0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
11ed0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
11ee0 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
11ef0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11f00 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
11f10 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
11f20 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
11f30 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61  ANDARD..      va
11f40 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20  lue = 0.0;..    
11f50 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11f60 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
11f70 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  lue_double_inter
11f80 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75  op(ptr, ref valu
11f90 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
11fa0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
11fb0 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
11fc0 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
11fd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
11fe0 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
11ff0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12000 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d  ide int GetParam
12010 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74  ValueInt32(IntPt
12020 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
12030 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
12040 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12050 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
12060 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t(ptr);..    }..
12070 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12080 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
12090 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
120a0 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
120b0 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20   {..      Int64 
120c0 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
120d0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
120e0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
120f0 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
12100 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12110 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74  3_value_int64(pt
12120 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  r);..#elif !SQLI
12130 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
12140 20 20 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20     value = 0;.. 
12150 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12160 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12170 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
12180 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61  erop(ptr, ref va
12190 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
121a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
121b0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
121c0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
121d0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
121e0 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
121f0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12200 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
12210 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
12220 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
12230 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
12240 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
12250 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
12260 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
12270 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
12280 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12290 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
122a0 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c  terop(ptr, ref l
122b0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
122c0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
122d0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
122e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
122f0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
12300 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20  ext(ptr),..     
12310 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
12320 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
12330 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29  alue_bytes(ptr))
12340 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
12350 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12360 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
12370 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
12380 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
12390 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
123a0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
123b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
123c0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
123d0 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
123e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
123f0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
12400 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f  rnBlob(IntPtr co
12410 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61  ntext, byte[] va
12420 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
12430 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
12440 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
12450 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65  esult_blob(conte
12460 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65  xt, value, value
12470 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72  .Length, (IntPtr
12480 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
12490 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
124a0 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
124b0 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
124c0 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
124d0 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
124e0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
124f0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
12500 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
12510 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12520 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
12530 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
12540 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
12550 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
12560 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12570 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
12580 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
12590 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
125a0 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
125b0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
125c0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
125d0 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
125e0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
125f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12600 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  e void ReturnErr
12610 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
12620 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
12630 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
12640 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12650 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
12660 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
12670 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
12680 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a  value.Length);..
12690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
126a0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
126b0 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28  oid ReturnInt32(
126c0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
126d0 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
126e0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
126f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12700 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
12710 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
12720 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12730 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12740 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
12750 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
12760 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
12770 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
12780 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
12790 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
127a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
127b0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
127c0 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61  nt64(context, va
127d0 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
127e0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
127f0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12800 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12810 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
12820 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
12830 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
12840 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
12850 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
12860 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
12870 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
12880 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12890 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
128a0 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
128b0 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
128c0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
128d0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
128e0 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
128f0 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
12900 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12910 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
12920 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
12930 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
12940 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
12950 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
12960 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
12970 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
12980 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
12990 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
129a0 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
129b0 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
129c0 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
129d0 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
129e0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
129f0 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
12a00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12a10 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
12a20 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
12a30 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
12a40 20 63 72 65 61 74 65 20 61 20 64 69 73 70 6f 73   create a dispos
12a50 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f  able..    /// mo
12a60 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  dule containing 
12a70 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
12a80 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  on of a virtual 
12a90 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  table...    /// 
12aa0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12ab0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12ac0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
12ad0 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62  // The module ob
12ae0 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65 64 20  ject to be used 
12af0 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68  when creating th
12b00 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61  e native disposa
12b10 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20  ble module...   
12b20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12b30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12b40 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
12b50 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66   /// The flags f
12b60 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
12b70 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
12b80 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
12b90 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
12ba0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
12bb0 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
12bc0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12bd0 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51   CreateModule(SQ
12be0 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
12bf0 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
12c00 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
12c10 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12c20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
12c30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12c40 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
12c50 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
12c60 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20  ("module");.... 
12c70 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
12c80 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
12c90 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d  tionFlags.NoLogM
12ca0 6f 64 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65  odule) != SQLite
12cb0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
12cc0 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20  NoLogModule)..  
12cd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12ce0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
12cf0 72 72 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20  rrors = ((flags 
12d00 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
12d10 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
12d20 65 45 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74  eError) == SQLit
12d30 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
12d40 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29  .LogModuleError)
12d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  ;..            m
12d60 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69  odule.LogExcepti
12d70 6f 6e 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ons = ((flags & 
12d80 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
12d90 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
12da0 78 63 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c  xception) == SQL
12db0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
12dc0 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65  gs.LogModuleExce
12dd0 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
12de0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
12df0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
12e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
12e10 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
12e20 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69  eption("connecti
12e30 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
12e40 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20  d handle");.... 
12e50 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78         SetLoadEx
12e60 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a  tension(true);..
12e70 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65          LoadExte
12e80 6e 73 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69  nsion(UnsafeNati
12e90 76 65 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45  veMethods.SQLITE
12ea0 5f 44 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76  _DLL, "sqlite3_v
12eb0 74 73 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d  tshim_init");...
12ec0 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
12ed0 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73  ule.CreateDispos
12ee0 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29  ableModule(_sql)
12ef0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
12f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d            if (_m
12f10 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  odules == null).
12f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f30 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20   _modules = new 
12f40 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
12f50 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e  g, SQLiteModule>
12f60 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12f70 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28     _modules.Add(
12f80 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64  module.Name, mod
12f90 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ule);....       
12fa0 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
12fb0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12fd0 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
12fe0 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  lse;....#if !NET
12ff0 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
13000 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
13010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13020 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
13030 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
13040 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f  CreateModule (Po
13050 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30  ol) Disabled: {0
13060 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e  }", _sql));..#en
13070 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
13080 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
13090 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
130a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
130b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
130c0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65  LiteException(Ge
130d0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
130e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
130f0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
13100 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
13110 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
13120 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
13130 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
13140 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f  cleanup the reso
13150 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61  urces..    /// a
13160 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
13170 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
13180 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
13190 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
131a0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
131b0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
131c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
131d0 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
131e0 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
131f0 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73   object previous
13200 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ly passed to the
13210 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61   <see cref="Crea
13220 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  teModule" />..  
13230 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
13240 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13250 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13260 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
13270 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
13280 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61   for the associa
13290 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
132a0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
132b0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
132c0 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
132d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
132e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
132f0 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
13300 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
13310 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
13320 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
13330 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
13340 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
13350 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13360 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
13370 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
13380 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
13390 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65  ..        module
133a0 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
133b0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
133c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
133d0 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
133e0 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
133f0 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
13400 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
13410 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13420 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
13430 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
13440 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
13450 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
13460 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
13470 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
13480 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
13490 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
134a0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
134b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
134c0 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
134d0 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  able..    /// in
134e0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
134f0 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
13500 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
13510 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
13520 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
13530 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
13540 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
13550 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
13560 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
13570 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
13580 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
13590 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
135a0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
135b0 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
135c0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
135d0 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
135e0 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
135f0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
13600 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61   /// being decla
13610 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
13620 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13630 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
13640 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  Sql">..    /// T
13650 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  he string contai
13660 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
13670 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e  tement describin
13680 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  g the virtual ta
13690 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ble to..    /// 
136a0 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  be declared...  
136b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
136c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
136d0 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
136e0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
136f0 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
13700 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
13710 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
13720 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
13730 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
13740 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
13750 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
13760 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
13770 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
13780 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
13790 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
137a0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
137b0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
137c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
137d0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
137e0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
137f0 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
13800 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
13810 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
13820 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ule,..        st
13830 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20  ring strSql,..  
13840 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
13850 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
13860 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13870 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
13880 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
13890 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
138a0 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
138b0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
138c0 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
138d0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
138e0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
138f0 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
13900 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
13910 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
13920 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
13930 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
13940 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
13950 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
13960 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
13970 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a  ing(strSql);....
13980 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
13990 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
139a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
139b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c  ods.sqlite3_decl
139c0 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20  are_vtab(..     
139d0 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
139e0 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   pSql);....     
139f0 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
13a00 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
13a10 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20  .Ok) && (module 
13a20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
13a30 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
13a40 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75  e.Declared = tru
13a50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13a60 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
13a70 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65  eErrorCode.Ok) e
13a80 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72  rror = GetLastEr
13a90 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ror();....      
13aa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
13ab0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
13ac0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
13ad0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13ae0 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20      if (pSql != 
13af0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
13b00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
13b20 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
13b30 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  Sql);..         
13b40 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e         pSql = In
13b50 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
13b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13b70 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
13b80 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
13b90 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
13ba0 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
13bb0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
13bc0 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
13bd0 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
13be0 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
13bf0 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65  tion in response
13c00 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20   to a call into 
13c10 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
13c20 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
13c30 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a  le.xCreate" />..
13c40 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20      /// or <see 
13c50 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
13c60 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
13c70 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74  ct" /> virtual t
13c80 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  able methods... 
13c90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13ca0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
13cb0 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
13cc0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69  ..    /// The vi
13cd0 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
13ce0 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
13cf0 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
13d00 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
13d10 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
13d20 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
13d30 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
13d40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13d50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
13d60 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20  umentCount">..  
13d70 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
13d80 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
13d90 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
13da0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
13db0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13dc0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13dd0 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20  name="name">..  
13de0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
13df0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  f the function b
13e00 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
13e10 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
13e20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13e30 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
13e40 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
13e50 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
13e60 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
13e70 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
13e80 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
13e90 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
13ea0 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
13eb0 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
13ec0 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
13ed0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
13ee0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
13ef0 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
13f00 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
13f10 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
13f20 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
13f30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13f40 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
13f50 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
13f60 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  alFunction(..   
13f70 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
13f80 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
13f90 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
13fa0 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73  ount,..        s
13fb0 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
13fc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
13fd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
13fe0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13ff0 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
14000 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
14010 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14020 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
14030 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
14040 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
14050 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
14060 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
14070 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
14080 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
14090 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
140a0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
140b0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
140c0 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
140d0 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
140e0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
140f0 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20  ring(name);.... 
14100 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
14110 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
14120 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14130 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c  ds.sqlite3_overl
14140 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20  oad_function(.. 
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
14160 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75  sql, pName, argu
14170 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mentCount);.... 
14180 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
14190 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
141a0 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
141b0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
141c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
141d0 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
141e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
141f0 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
14200 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
14210 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
14220 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
14230 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14240 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
14250 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b  ory.Free(pName);
14260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14270 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72    pName = IntPtr
14280 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
14290 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
142a0 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
142b0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
142c0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
142d0 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
142e0 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  d extension load
142f0 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a  ing by SQLite...
14300 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14310 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
14320 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22  am name="bOnOff"
14330 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
14340 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e  to enable loadin
14350 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c  g of extensions,
14360 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   false to disabl
14370 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
14380 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
14390 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
143a0 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
143b0 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  n(bool bOnOff)..
143c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
143d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
143e0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
143f0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
14400 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
14410 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
14420 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
14430 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
14440 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
14450 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14460 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
14470 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
14480 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
14490 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
144a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
144b0 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
144c0 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
144d0 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
144e0 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20  e named file... 
144f0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
14500 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14510 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65  m name="fileName
14520 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
14530 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61  name of the dyna
14540 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79  mic link library
14550 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
14560 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
14570 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
14580 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14590 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65  m name="procName
145a0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
145b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f  name of the expo
145c0 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73  rted function us
145d0 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
145e0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
145f0 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c  .    /// If null
14600 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  , the default "s
14610 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e  qlite3_extension
14620 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75  _init" will be u
14630 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
14640 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
14650 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14660 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  id LoadExtension
14670 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65  (string fileName
14680 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d  , string procNam
14690 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
146a0 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
146b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
146c0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
146d0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
146e0 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22  ption("fileName"
146f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
14700 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e  tPtr pError = In
14710 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
14720 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
14730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14740 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c    byte[] utf8Fil
14750 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  eName = UTF8Enco
14760 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
14770 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c  es(fileName + '\
14780 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0');..          
14790 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f    byte[] utf8Pro
147a0 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  cName = null;...
147b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
147c0 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c  (procName != nul
147d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
147e0 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65      utf8ProcName
147f0 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e   = UTF8Encoding.
14800 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72  UTF8.GetBytes(pr
14810 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d  ocName + '\0');.
14820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
14830 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
14840 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
14850 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
14860 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61  _sql, utf8FileNa
14890 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65  me, utf8ProcName
148a0 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a  , ref pError);..
148b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
148c0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
148d0 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
148e0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
148f0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
14900 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53  ption(n, UTF8ToS
14910 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31  tring(pError, -1
14920 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
14930 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
14940 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14950 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72          if (pErr
14960 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
14970 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
14980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14990 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
149a0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
149b0 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ree(pError);..  
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
149d0 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
149e0 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
149f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
14a00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
14a10 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
14a20 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73  led extended res
14a30 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
14a40 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
14a50 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14a60 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65  ide void SetExte
14a70 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28  ndedResultCodes(
14a80 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
14a90 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
14aa0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
14ab0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14ac0 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
14ad0 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
14ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  (..          _sq
14af0 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
14b00 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
14b10 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
14b20 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
14b30 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
14b40 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
14b50 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
14b60 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
14b70 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
14b80 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
14b90 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14ba0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
14bb0 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  e ResultCode()..
14bc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
14bd0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
14be0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14bf0 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
14c00 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
14c10 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
14c20 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72  ite extended err
14c30 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
14c40 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
14c50 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45  QLiteErrorCode E
14c60 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
14c70 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
14c80 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
14c90 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14ca0 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
14cb0 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
14cc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
14cd0 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
14ce0 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
14cf0 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
14d00 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
14d10 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14d20 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  id LogMessage(SQ
14d30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
14d40 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
14d50 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
14d60 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67  .      StaticLog
14d70 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f 64 65  Message(iErrCode
14d80 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  , zMessage);..  
14d90 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
14da0 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
14db0 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
14dc0 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
14dd0 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
14de0 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
14df0 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67   StaticLogMessag
14e00 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
14e10 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
14e20 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20  ng zMessage)..  
14e30 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
14e40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14e50 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43  qlite3_log(iErrC
14e60 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73  ode, ToUTF8(zMes
14e70 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  sage));..    }..
14e80 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f  ..#if INTEROP_CO
14e90 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49  DEC || INTEROP_I
14ea0 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20  NCLUDE_SEE..    
14eb0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14ec0 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f  e void SetPasswo
14ed0 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f  rd(byte[] passwo
14ee0 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
14ef0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
14f00 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
14f10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14f20 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c  qlite3_key(_sql,
14f30 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20   passwordBytes, 
14f40 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  passwordBytes.Le
14f50 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
14f60 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
14f70 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
14f80 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
14f90 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
14fa0 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
14fb0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14fc0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68  override void Ch
14fd0 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
14fe0 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
14ff0 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
15000 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
15010 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
15020 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15030 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20  te3_rekey(_sql, 
15040 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
15050 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79  , (newPasswordBy
15060 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30  tes == null) ? 0
15070 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79   : newPasswordBy
15080 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
15090 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
150a0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
150b0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
150c0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
150d0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
150e0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
150f0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15100 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
15110 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74 20  rogressHook(int 
15120 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72 6f 67  nOps, SQLiteProg
15130 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66 75 6e  ressCallback fun
15140 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
15150 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
15160 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
15170 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
15180 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e 63  _sql, nOps, func
15190 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
151a0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
151b0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
151c0 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69 7a  void SetAuthoriz
151d0 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75 74  erHook(SQLiteAut
151e0 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b 20  horizerCallback 
151f0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
15200 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
15210 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
15220 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 5f  set_authorizer(_
15230 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
15240 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
15250 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
15260 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
15270 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69  tUpdateHook(SQLi
15280 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  teUpdateCallback
15290 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
152a0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
152b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
152c0 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71  _update_hook(_sq
152d0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
152e0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
152f0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15300 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 43  erride void SetC
15310 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
15320 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
15330 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
15340 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
15350 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
15360 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  ommit_hook(_sql,
15370 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
15380 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
15390 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
153a0 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72 61  ride void SetTra
153b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ceCallback(SQLit
153c0 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66  eTraceCallback f
153d0 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
153e0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
153f0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
15400 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  race(_sql, func,
15410 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
15420 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
15430 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
15440 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48  oid SetRollbackH
15450 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61  ook(SQLiteRollba
15460 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ckCallback func)
15470 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
15480 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
15490 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62  ds.sqlite3_rollb
154a0 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ack_hook(_sql, f
154b0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
154c0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
154d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
154e0 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74      /// Allows t
154f0 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20  he setting of a 
15500 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
15510 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69   invoked by SQLi
15520 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f  te when a..    /
15530 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63  // log event occ
15540 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63  urs.  Only one c
15550 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73  allback may be s
15560 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20  et.  If NULL is 
15570 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  passed,..    ///
15580 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c   the logging cal
15590 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73  lback is unregis
155a0 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tered...    /// 
155b0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
155c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
155d0 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62  "func">The callb
155e0 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
155f0 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d  invoke.</param>.
15600 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
15610 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
15620 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
15630 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
15640 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
15650 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43  rrorCode SetLogC
15660 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
15670 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
15680 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
15690 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
156a0 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
156b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
156c0 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20  _config_log(..  
156d0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
156e0 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
156f0 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
15700 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
15710 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
15720 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
15730 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
15740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15790 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
157a0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
157b0 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
157c0 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
157d0 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
157e0 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
157f0 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
15800 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
15810 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
15820 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
15830 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
15840 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
15850 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
15860 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
15870 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
15880 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
15890 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
158a0 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
158b0 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
158c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
158d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
158e0 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
158f0 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
15900 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
15910 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15920 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
15930 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
15940 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
15950 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
15960 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15970 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
15980 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
15990 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
159a0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
159b0 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
159c0 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
159d0 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
159e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
159f0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
15a00 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
15a10 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
15a20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
15a30 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
15a40 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
15a50 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
15a60 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
15a70 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
15a80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
15a90 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15ab0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
15ac0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
15ad0 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
15ae0 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
15af0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15b00 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15b10 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
15b20 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
15b30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
15b40 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
15b50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15b60 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
15b70 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
15b80 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
15b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
15ba0 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
15bb0 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
15bc0 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
15bd0 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
15be0 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
15bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
15c00 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
15c10 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
15c20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
15c30 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
15c40 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
15c50 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
15c60 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
15c70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
15c80 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
15c90 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
15ca0 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
15cb0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
15cc0 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
15cd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15ce0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
15cf0 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
15d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15d10 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
15d20 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
15d30 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
15d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15d50 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
15d60 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15d70 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
15d80 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
15d90 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
15da0 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
15db0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15dc0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
15dd0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
15de0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
15e00 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
15e10 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
15e20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
15e30 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
15e40 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
15e50 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
15e60 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
15e70 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
15e80 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
15e90 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
15ea0 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75  ckupHandle backu
15eb0 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d  pHandle = null;.
15ec0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
15ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15ee0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
15ef0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
15f00 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
15f10 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
15f20 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
15f30 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
15f40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15f50 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d   IntPtr backup =
15f60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
15f70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
15f80 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20  kup_init(..     
15f90 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48             destH
15fa0 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
15fb0 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
15fc0 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  zSourceName);...
15fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15fe0 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74  (backup == IntPt
15ff0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
16000 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16010 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
16020 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f  rorCode resultCo
16030 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28  de = ResultCode(
16040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16050 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
16060 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72  Code != SQLiteEr
16070 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
160a0 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c  eException(resul
160b0 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72  tCode, GetLastEr
160c0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
160d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
16100 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61  iteException("fa
16110 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  iled to initiali
16120 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20  ze backup");..  
16130 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16140 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
16150 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  pHandle = new SQ
16160 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
16170 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
16180 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  kup);..        }
16190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
161a0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
161b0 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
161c0 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
161d0 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
161e0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
161f0 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
16200 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
16210 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
16220 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e     null, null, n
16230 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  ull, backupHandl
16240 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a  e, null, new obj
16250 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
16260 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
16270 74 65 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20 64  te3), destCnn, d
16280 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e  estName, sourceN
16290 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame }));....    
162a0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
162b0 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
162c0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
162d0 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
162e0 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
162f0 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
16300 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
16310 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
16320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
16330 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16340 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
16350 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
16360 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
16370 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
16380 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
16390 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
163a0 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
163b0 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
163c0 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
163d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
163e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
163f0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
16400 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
16410 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16420 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
16430 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
16440 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
16450 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
16460 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
16470 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
16480 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16490 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
164a0 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
164b0 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
164c0 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
164d0 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
164e0 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
164f0 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
16500 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
16510 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
16520 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
16530 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16540 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
16550 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
16560 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
16570 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
16580 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
16590 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
165a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
165b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
165c0 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
165d0 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
165e0 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
165f0 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
16600 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  age,..        re
16610 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  f bool retry..  
16620 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
16630 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
16640 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16650 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
16660 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16670 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
16680 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
16690 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
166a0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
166b0 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
166c0 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
166d0 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
166e0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
166f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
16700 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
16710 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
16720 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
16740 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
16750 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
16760 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
16770 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
16780 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
16790 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
167a0 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
167b0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
167c0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
167d0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
167e0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
167f0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
16800 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
16810 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
16820 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
16830 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
16840 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
16850 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
16860 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
16870 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
16880 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
16890 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
168a0 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
168b0 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
168c0 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
168d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
168e0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
168f0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
16900 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
16910 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
16920 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16930 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
16940 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
16950 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
16960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
16970 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
16980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
16990 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
169a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
169b0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
169c0 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
169d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
169e0 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
169f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16a00 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
16a10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16a20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
16a30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16a40 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
16a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
16a60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
16a70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16a80 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
16aa0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
16ab0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
16ac0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
16ad0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
16ae0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16af0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
16b00 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
16b10 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
16b20 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
16b30 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
16b40 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
16b50 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
16b60 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
16b70 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
16b80 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
16b90 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
16ba0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
16bb0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
16bc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
16bd0 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
16be0 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
16bf0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
16c00 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
16c10 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
16c20 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
16c30 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
16c40 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16c50 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
16c60 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
16c70 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
16c80 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
16c90 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
16ca0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
16cb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16cc0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
16cd0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
16ce0 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
16cf0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
16d00 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
16d10 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
16d20 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
16d30 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
16d40 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
16d50 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
16d60 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
16d70 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
16da0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
16db0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
16dc0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
16dd0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
16de0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
16df0 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
16e00 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
16e10 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
16e20 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
16e30 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
16e40 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
16e50 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
16e60 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
16e70 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
16e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
16e90 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16ea0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
16eb0 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
16ec0 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
16ed0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
16ee0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
16ef0 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
16f00 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
16f10 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
16f20 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
16f30 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
16f40 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
16f50 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
16f60 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16f70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16f80 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
16f90 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
16fa0 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
16fb0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
16fc0 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
16fd0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
16fe0 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
16ff0 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
17000 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
17010 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
17020 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
17030 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17040 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
17050 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
17060 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
17070 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17080 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
17090 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
170a0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
170b0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
170c0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
170d0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
170e0 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
170f0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
17100 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
17110 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17120 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
17130 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17150 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
17160 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
17170 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
17180 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
17190 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
171a0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
171b0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
171c0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
171d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
171e0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
171f0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
17200 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
17210 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
17220 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
17230 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
17240 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
17250 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17260 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
17270 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
17280 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
17290 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
172a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
172b0 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
172c0 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
172d0 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
172e0 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
172f0 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
17300 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
17310 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
17320 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
17330 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
17340 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
17350 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
17360 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
17370 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
17380 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
17390 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
173a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
173b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
173c0 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
173d0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
173e0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
173f0 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
17400 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
17410 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
17420 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
17430 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
17440 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
17450 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
17460 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17470 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
17480 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
17490 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
174a0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
174b0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
174c0 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
174d0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
174e0 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
174f0 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
17500 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
17510 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
17520 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
17530 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
17540 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
17550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17560 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
17570 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
17580 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
17590 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
175a0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
175b0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
175c0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
175d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
175e0 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
175f0 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
17600 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
17610 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
17620 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
17630 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17640 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
17650 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
17660 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
17670 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
17680 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
17690 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
176a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
176b0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
176c0 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
176d0 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
176e0 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
176f0 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
17700 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
17710 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
17720 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
17730 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
17740 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
17750 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
17760 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
17770 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
17780 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
17790 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
177a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
17800 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
17810 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
17820 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
17830 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
17840 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
17850 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
17860 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
17870 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
17880 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
17890 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
178a0 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
178b0 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
178c0 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
178d0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
178e0 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
178f0 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
17900 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
17910 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
17920 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
17930 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
17940 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
17950 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
17960 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
17970 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
17980 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
17990 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
179a0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
179b0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
179c0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
179d0 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
179e0 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
179f0 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
17a00 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
17a10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
17a20 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17a30 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
17a40 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
17a50 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
17a60 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
17a70 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
17a80 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
17a90 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
17aa0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
17ab0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
17ac0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
17ad0 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
17ae0 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
17af0 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
17b00 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
17b10 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
17b20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
17b30 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
17b40 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
17b50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17b60 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
17b70 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
17b80 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
17b90 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
17ba0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
17bb0 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
17bc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17bd0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17be0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
17bf0 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
17c00 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
17c10 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
17c20 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
17c30 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
17c40 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
17c50 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
17c60 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
17c70 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
17c80 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17c90 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
17ca0 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
17cb0 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
17cc0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
17cd0 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
17ce0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17cf0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
17d00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17d10 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
17d20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
17d30 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
17d40 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
17d50 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
17d60 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
17d70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17d80 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
17d90 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
17da0 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
17db0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17dd0 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
17de0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
17df0 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
17e00 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
17e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
17e30 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
17e40 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
17e50 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e80 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
17e90 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
17ea0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
17eb0 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
17ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ed0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
17ee0 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
17ef0 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
17f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f10 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
17f20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
17f30 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
17f40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17f50 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
17f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17f70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
17f80 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
17f90 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
17fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17fb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
17fc0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
17fd0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c  ry>..    /// Hel
17fe0 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
17ff0 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d  retrieve a colum
18000 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61  n of data from a
18010 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  n active stateme
18020 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
18030 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
18040 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
18050 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
18060 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64  t being step()'d
18070 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e   through</param>
18080 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
18090 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
180a0 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
180b0 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e  ed with the conn
180c0 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
180d0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
180e0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
180f0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
18100 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
18110 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
18120 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
18130 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
18140 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
18150 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
18160 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
18170 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
18180 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
18190 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
181a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
181b0 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
181c0 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
181d0 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
181e0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
181f0 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
18200 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
18210 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
18220 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
18230 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
18240 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
18250 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
18260 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
18270 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66  ty aff = typ.Aff
18280 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69 66  inity;..      if
18290 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66 66   (aff == TypeAff
182a0 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75  inity.Null) retu
182b0 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
182c0 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
182d0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
182e0 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
182f0 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
18300 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18310 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
18320 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
18330 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
18340 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
18350 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20  ffinity(t);..   
18360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
18370 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
18380 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
18390 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d  .GetAllAsText) =
183a0 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
183b0 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
183c0 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
183d0 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
183e0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
183f0 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
18400 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
18410 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
18420 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
18430 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
18440 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
18450 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
18460 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
18470 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
18480 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
18490 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
184a0 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
184b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
184c0 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
184d0 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
184e0 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
184f0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
18500 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
18510 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
18520 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
18530 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
18540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
18550 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
18560 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
18570 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
18580 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
18590 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
185a0 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
185b0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
185c0 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
185d0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
185e0 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
185f0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
18600 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
18610 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
18620 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
18630 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
18640 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
18650 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
18660 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
18670 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
18680 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
18690 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
186a0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
186b0 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
186c0 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  4:..          if
186d0 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
186e0 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d  urn GetInt64(stm
186f0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
18700 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
18710 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
18720 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
18730 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
18740 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
18750 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
18760 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
18770 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
18780 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
18790 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
187a0 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
187b0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
187c0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
187d0 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
187e0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
187f0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
18800 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
18810 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
18820 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
18830 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
18840 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
18850 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
18860 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
18870 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
18880 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
18890 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
188a0 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
188b0 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
188c0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
188d0 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
188e0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
188f0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
18900 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
18910 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
18920 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18930 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
18940 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
18950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
18960 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
18970 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
18980 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
18990 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
189a0 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
189b0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
189c0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
189d0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
189e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
189f0 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
18a00 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
18a10 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
18a20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
18a30 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
18a40 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
18a50 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18a60 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18a70 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
18a80 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
18a90 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
18aa0 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
18ab0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
18ac0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
18ad0 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20  g rowid = 0;..  
18ae0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18af0 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
18b00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
18b10 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69  ite3_cursor_rowi
18b20 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  d_interop(stmt._
18b30 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72  sqlite_stmt, cur
18b40 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b  sor, ref rowid);
18b50 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d  ..      if (rc =
18b60 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18b70 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77  e.Ok) return row
18b80 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  id;....      ret
18b90 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20  urn 0;..#else.. 
18ba0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
18bb0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
18bc0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
18bd0 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49  erride void GetI
18be0 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64  ndexColumnExtend
18bf0 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61  edInfo(string da
18c00 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69  tabase, string i
18c10 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c  ndex, string col
18c20 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72  umn, ref int sor
18c30 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f  tMode, ref int o
18c40 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69  nError, ref stri
18c50 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ng collationSequ
18c60 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ence)..    {..#i
18c70 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
18c80 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
18c90 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   coll = IntPtr.Z
18ca0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
18cb0 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  colllen = 0;..  
18cc0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18cd0 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  ode rc;....     
18ce0 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
18cf0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
18d00 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
18d10 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  nfo_interop(_sql
18d20 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73  , ToUTF8(databas
18d30 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78  e), ToUTF8(index
18d40 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
18d50 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c  ), ref sortMode,
18d60 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65   ref onError, re
18d70 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c  f coll, ref coll
18d80 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  len);..      if 
18d90 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
18da0 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
18db0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
18dc0 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d  tion(rc, null);.
18dd0 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ...      collati
18de0 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  onSequence = UTF
18df0 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20  8ToString(coll, 
18e00 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  colllen);..#else
18e10 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65  ..      sortMode
18e20 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45   = 0;..      onE
18e30 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20  rror = 2;..     
18e40 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
18e50 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a  ce = "BINARY";..
18e60 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
18e70 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
18e80 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
18e90 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72  orCode FileContr
18ea0 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d  ol(string zDbNam
18eb0 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74  e, int op, IntPt
18ec0 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a  r pArg)..    {..
18ed0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
18ee0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
18ef0 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f  .sqlite3_file_co
18f00 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62  ntrol(_sql, (zDb
18f10 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  Name != null) ? 
18f20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20  ToUTF8(zDbName) 
18f30 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67  : null, op, pArg
18f40 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
18f50 7d 0d 0a                                         }..