System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2d3c6915777b62a45aacf5136fb78333e0045f85:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0250: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a  m.Threading;....
0260: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0270: 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74  .  /// This is t
0280: 68 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74  he method signat
0290: 75 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ure for the SQLi
02a0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
02b0: 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
02c0: 0d 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e  ..  /// function
02d0: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71   for use with sq
02e0: 6c 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20  lite3_log() and 
02f0: 74 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  the SQLITE_CONFI
0300: 47 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20  G_LOG...  ///.. 
0310: 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68   /// WARNING: Th
0320: 69 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75  is delegate is u
0330: 73 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73  sed more-or-less
0340: 20 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74   directly by nat
0350: 69 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20  ive code, do..  
0360: 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74  ///          not
0370: 20 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65   modify its type
0380: 20 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f   signature...  /
0390: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
03a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
03b0: 3d 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20  ="pUserData">.. 
03c0: 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64   /// The extra d
03d0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
03e0: 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65  ith this message
03f0: 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f  , if any...  ///
0400: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f   </param>..  ///
0410: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
0420: 72 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f  rorCode">..  ///
0430: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
0440: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0450: 74 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20  this message... 
0460: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0470: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0480: 3d 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20  ="pMessage">..  
0490: 2f 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20  /// The message 
04a0: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67  string to be log
04b0: 67 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ged...  /// </pa
04c0: 72 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46  ram>..#if !PLATF
04d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
04e0: 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67  WORK..  [Unmanag
04f0: 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65  edFunctionPointe
0500: 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74  r(CallingConvent
0510: 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e  ion.Cdecl)]..#en
0520: 64 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20  dif..  internal 
0530: 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51  delegate void SQ
0540: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28  LiteLogCallback(
0550: 49 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61  IntPtr pUserData
0560: 2c 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c  , int errorCode,
0570: 20 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65   IntPtr pMessage
0580: 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  );....  /// <sum
0590: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
05a0: 73 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e  s class implemen
05b0: 74 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f  ts SQLiteBase co
05c0: 6d 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73  mpletely, and is
05d0: 20 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65   the guts of the
05e0: 20 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72   code that inter
05f0: 6f 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68  op's SQLite with
0600: 20 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73   .NET..  /// </s
0610: 75 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72  ummary>..  inter
0620: 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65  nal class SQLite
0630: 33 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a  3 : SQLiteBase..
0640: 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65    {..    private
0650: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73   static object s
0660: 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
0670: 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f  ject();....    /
0680: 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  /..    // NOTE: 
0690: 54 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c  This is the publ
06a0: 69 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53  ic key for the S
06b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
06c0: 65 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20  e assembly.  If 
06d0: 79 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a  you change the..
06e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b      //       SNK
06f0: 20 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20   file, you will 
0700: 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74  need to change t
0710: 68 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  his as well...  
0720: 20 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e    //..    intern
0730: 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  al const string 
0740: 50 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20  PublicKey =..   
0750: 20 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34       "0024000004
0760: 38 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36  8000009400000006
0770: 30 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32  0200000024000052
0780: 35 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31  5341310004000001
0790: 30 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36  00010005a288de56
07a0: 38 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20  87c4e1" +..     
07b0: 20 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34     "b621ddff5d84
07c0: 34 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37  4727418956997f47
07d0: 35 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66  5eb829429e411aff
07e0: 33 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62  3e93f97b70de698b
07f0: 39 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38  972640925bdd4428
0800: 30 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20  0df0" +..       
0810: 20 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37   "a25a8432669737
0820: 30 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31  04137cbb0e7441c1
0830: 66 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31  fe7cae4e2440ae91
0840: 61 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31  ab8cde3933febcb1
0850: 61 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34  ac48dd33b40e13c4
0860: 32 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22  21" +..        "
0870: 64 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33  d8215c18a4349a43
0880: 36 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38  6dd499e3c385cc68
0890: 33 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39  3015f886f6c10bd9
08a0: 30 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35  0115eb2bd61b6775
08b0: 30 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63  0839e3a19941dc9c
08c0: 22 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  ";....#if !PLATF
08d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
08e0: 57 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  WORK..    intern
08f0: 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  al const string 
0900: 44 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20  DesignerVersion 
0910: 3d 20 22 31 2e 30 2e 39 38 2e 30 22 3b 0d 0a 23  = "1.0.98.0";..#
0920: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
0930: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0940: 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70  /// The opaque p
0950: 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20  ointer returned 
0960: 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c  to us by the sql
0970: 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20  ite provider..  
0980: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0990: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
09a0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
09b0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
09c0: 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65  _sql;..    prote
09d0: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c  cted string _fil
09e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74  eName;..    prot
09f0: 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50  ected bool _useP
0a00: 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  ool;..    protec
0a10: 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72  ted int _poolVer
0a20: 73 69 6f 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61  sion;..    priva
0a30: 74 65 20 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f  te int _cancelCo
0a40: 75 6e 74 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54  unt;....#if (NET
0a50: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
0a60: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
0a70: 35 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  51) && !PLATFORM
0a80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0a90: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0aa0: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0ab0: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0ac0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0ad0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0ae0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0af0: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0b00: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0b10: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0b20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0b30: 74 65 63 74 65 64 20 4c 69 73 74 3c 53 51 4c 69  tected List<SQLi
0b40: 74 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e  teFunction> _fun
0b50: 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49  ctions;....#if I
0b60: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
0b70: 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
0b80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0b90: 20 54 68 65 20 6d 6f 64 75 6c 65 73 20 63 72 65   The modules cre
0ba0: 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
0bb0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
0bc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0bd0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 44  .    protected D
0be0: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
0bf0: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20  , SQLiteModule> 
0c00: 5f 6d 6f 64 75 6c 65 73 3b 0d 0a 23 65 6e 64 69  _modules;..#endi
0c10: 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  f....    ///////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0c80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0c90: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
0ca0: 73 20 74 68 65 20 6f 62 6a 65 63 74 20 75 73 65  s the object use
0cb0: 64 20 74 6f 20 69 6e 74 65 72 61 63 74 20 77 69  d to interact wi
0cc0: 74 68 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  th the SQLite co
0cd0: 72 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20  re library..    
0ce0: 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 55 54  /// using the UT
0cf0: 46 2d 38 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  F-8 text encodin
0d00: 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  g...    /// </su
0d10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0d20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74  <param name="fmt
0d30: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
0d40: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format 
0d50: 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
0d60: 63 6f 6e 76 65 72 74 69 6e 67 20 73 74 72 69 6e  converting strin
0d70: 67 20 76 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20  g values to a.. 
0d80: 20 20 20 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20     /// DateTime 
0d90: 61 6e 64 20 62 69 6e 64 69 6e 67 20 44 61 74 65  and binding Date
0da0: 54 69 6d 65 20 70 61 72 61 6d 65 74 65 72 73 2e  Time parameters.
0db0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0dc0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0dd0: 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d  am name="kind">.
0de0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
0df0: 65 20 63 72 65 66 3d 22 44 61 74 65 54 69 6d 65  e cref="DateTime
0e00: 4b 69 6e 64 22 20 2f 3e 20 74 6f 20 62 65 20 75  Kind" /> to be u
0e10: 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e  sed when creatin
0e20: 67 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20  g DateTime..    
0e30: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
0e40: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 66 6d 74 53 74 72 69 6e 67 22 3e 0d  me="fmtString">.
0e70: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72  .    /// The for
0e80: 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65  mat string to be
0e90: 20 75 73 65 64 20 77 68 65 6e 20 70 61 72 73 69   used when parsi
0ea0: 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e  ng and formattin
0eb0: 67 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20  g DateTime..    
0ec0: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
0ed0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0ee0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0ef0: 6d 65 3d 22 64 62 22 3e 0d 0a 20 20 20 20 2f 2f  me="db">..    //
0f00: 2f 20 54 68 65 20 6e 61 74 69 76 65 20 68 61 6e  / The native han
0f10: 64 6c 65 20 74 6f 20 62 65 20 61 73 73 6f 63 69  dle to be associ
0f20: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 64 61  ated with the da
0f30: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
0f40: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
0f50: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
0f60: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
0f70: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
0f80: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
0f90: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 73  ed file name ass
0fa0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 3c 70 61  ociated with <pa
0fb0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 20  ramref name="db 
0fc0: 22 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  "/>...    /// </
0fd0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
0fe0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e  <param name="own
0ff0: 48 61 6e 64 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  Handle">..    //
1000: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
1010: 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
1020: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1030: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 69 73  will need to dis
1040: 70 6f 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66  pose..    /// of
1050: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
1060: 22 64 62 22 20 2f 3e 20 77 68 65 6e 20 69 74 20  "db" /> when it 
1070: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65  is no longer nee
1080: 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ded...    /// </
1090: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
10a0: 72 6e 61 6c 20 53 51 4c 69 74 65 33 28 0d 0a 20  rnal SQLite3(.. 
10b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
10c0: 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a 20  eFormats fmt,.. 
10d0: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b         DateTimeK
10e0: 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20  ind kind,..     
10f0: 20 20 20 73 74 72 69 6e 67 20 66 6d 74 53 74 72     string fmtStr
1100: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 49 6e  ing,..        In
1110: 74 50 74 72 20 64 62 2c 0d 0a 20 20 20 20 20 20  tPtr db,..      
1120: 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
1130: 65 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  e,..        bool
1140: 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20   ownHandle..    
1150: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 3a 20 62      )..      : b
1160: 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c 20 66  ase(fmt, kind, f
1170: 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 7b  mtString)..    {
1180: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 62  ..        if (db
1190: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
11a0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11b0: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20           _sql = 
11c0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
11d0: 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 6f  tionHandle(db, o
11e0: 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20  wnHandle);..    
11f0: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
1200: 65 20 3d 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  e = fileName;...
1210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1220: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
1230: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
1240: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
1250: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
1260: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1270: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70  nnectionEventTyp
1280: 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e  e.NewCriticalHan
1290: 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  dle, null, null,
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b0: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
12c0: 71 6c 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6e 65  ql, fileName, ne
12d0: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 66 6d 74  w object[] { fmt
12e0: 2c 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20  , kind,..       
12f0: 20 20 20 20 20 20 20 20 20 66 6d 74 53 74 72 69           fmtStri
1300: 6e 67 2c 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65  ng, db, fileName
1310: 2c 20 6f 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b  , ownHandle }));
1320: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1330: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13a0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
13b0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
13c0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
13d0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
13e0: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
13f0: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
1400: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
1410: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
1420: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
1430: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
1440: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
1450: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
1460: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
1470: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
1480: 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  te3).Name);..#en
1490: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
14a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
1510: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
1520: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
1530: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  sposing)..    {.
1540: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1550: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1560: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
1570: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
1580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1590: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
15a0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
15b0: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
15c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1600: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
1610: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
1620: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1630: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1640: 20 20 20 2f 2f 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1680: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
1690: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16d0: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
16e0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
16f0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
1700: 20 20 20 20 20 20 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 2f 2f 0d 0a 0d 0a  ////////////....
1730: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
1740: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL_TABLE..     
1750: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
1760: 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65  seModules();..#e
1770: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1780: 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28 66 61          Close(fa
1790: 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69  lse); /* Disposi
17a0: 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77  ng, cannot throw
17b0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
17c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
17d0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
17e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
17f0: 20 20 20 20 20 20 20 20 62 61 73 65 2e 44 69 73          base.Dis
1800: 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b  pose(disposing);
1810: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1820: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1830: 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68  // NOTE: Everyth
1840: 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ing should be fu
1850: 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20  lly disposed at 
1860: 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20  this point...   
1870: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1880: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1890: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
18a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
18b0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
18c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  //....#if INTERO
1930: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
1940: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1950: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
1960: 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73   method attempts
1970: 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61   to dispose of a
1980: 6c 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ll the <see cref
1990: 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
19a0: 2f 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20  /> derived..    
19b0: 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  /// object insta
19c0: 6e 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61  nces currently a
19d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
19e0: 68 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61  he native databa
19f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
1a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1a10: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
1a20: 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75  void DisposeModu
1a30: 6c 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  les()..    {..  
1a40: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a50: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e    // NOTE: If an
1a60: 79 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63  y modules were c
1a70: 72 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20  reated, attempt 
1a80: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20  to dispose of.. 
1a90: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1aa0: 74 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20  them now.  This 
1ab0: 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64  code is designed
1ac0: 20 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69   to avoid throwi
1ad0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ng..        //  
1ae0: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20       exceptions 
1af0: 75 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f  unless the Dispo
1b00: 73 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  se method of the
1b10: 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20   module..       
1b20: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
1b30: 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70   throws an excep
1b40: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
1b50: 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  /..        if (_
1b60: 6d 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29  modules != null)
1b70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1b80: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1b90: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73   (KeyValuePair<s
1ba0: 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64  tring, SQLiteMod
1bb0: 75 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f  ule> pair in _mo
1bc0: 64 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20  dules)..        
1bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1be0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
1bf0: 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69  ule module = pai
1c00: 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  r.Value;....    
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c20: 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
1c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c40: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c60: 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65    module.Dispose
1c70: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1c80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c90: 20 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72    _modules.Clear
1ca0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
1cb0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
1cc0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
1d30: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
1d40: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
1d50: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
1d60: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
1d70: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
1d80: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
1d90: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
1da0: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
1db0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
1dc0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1dd0: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
1de0: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
1df0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
1e00: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
1e10: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
1e20: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
1e30: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
1e40: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
1e50: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
1e60: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
1e70: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1e80: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1e90: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
1ea0: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
1eb0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
1ec0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
1ed0: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1ee0: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
1ef0: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
1f00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f10: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
1f20: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1f30: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
1f40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f50: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1f60: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f80: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
1f90: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
1fa0: 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68  sql, _sql, canTh
1fb0: 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20  row))..         
1fc0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 49 4e 54 45       {..#if INTE
1fd0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1fe0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1ff0: 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75       DisposeModu
2000: 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  les();..#endif..
2010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2020: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2030: 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69  tionPool.Add(_fi
2040: 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70  leName, _sql, _p
2050: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  oolVersion);....
2060: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
2070: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2080: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2090: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20a0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
20b0: 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20  g.Format("Close 
20c0: 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20  (Pool) Success: 
20d0: 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23  {0}", _sql));..#
20e0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
20f0: 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54       }..#if !NET
2100: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
2110: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
2120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
2130: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2140: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2150: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2160: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
2170: 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f  ormat("Close (Po
2180: 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d  ol) Failure: {0}
2190: 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 20 20 20 20  ", _sql));..    
21a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
21b0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
21c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
21d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
21f0: 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  l.Dispose();..  
2200: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2210: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
2220: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2230: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2290: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
22b0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
22c0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
22d0: 65 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  es the <see cref
22e0: 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74  ="Cancel" /> met
22f0: 68 6f 64 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  hod has been..  
2300: 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20    /// called... 
2310: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2320: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  >..    private i
2330: 6e 74 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e  nt GetCancelCoun
2340: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2350: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
2360: 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78  locked.CompareEx
2370: 63 68 61 6e 67 65 28 72 65 66 20 5f 63 61 6e 63  change(ref _canc
2380: 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d  elCount, 0, 0);.
2390: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2400: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2410: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
2420: 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e   method determin
2430: 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
2440: 74 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53  t a <see cref="S
2450: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20  QLiteException" 
2460: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  />..    /// with
2470: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f   a return code o
2480: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
2490: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74  iteErrorCode.Int
24a0: 65 72 72 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c  errupt" /> shoul
24b0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74 68  d..    /// be th
24c0: 72 6f 77 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e  rown after makin
24d0: 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  g a call into th
24e0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
24f0: 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
2500: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2510: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2520: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
2530: 69 66 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22  if a <see cref="
2540: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22  SQLiteException"
2550: 20 2f 3e 20 74 6f 20 62 65 20 74 68 72 6f 77 6e   /> to be thrown
2560: 2e 20 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a  .  This method..
2570: 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c      /// will onl
2580: 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  y return non-zer
2590: 6f 20 69 66 20 74 68 65 20 3c 73 65 65 20 63 72  o if the <see cr
25a0: 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d  ef="Cancel" /> m
25b0: 65 74 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64  ethod was called
25c0: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72  ..    /// one or
25d0: 20 6d 6f 72 65 20 74 69 6d 65 73 20 64 75 72 69   more times duri
25e0: 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  ng a call into t
25f0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
2600: 69 62 72 61 72 79 20 28 65 2e 67 2e 20 77 68 65  ibrary (e.g. whe
2610: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73  n..    /// the s
2620: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 2a 28  qlite3_prepare*(
2630: 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ) or sqlite3_ste
2640: 70 28 29 20 41 50 49 73 20 61 72 65 20 75 73 65  p() APIs are use
2650: 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  d)...    /// </r
2660: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
2670: 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64  vate bool Should
2680: 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29  ThrowForCancel()
2690: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
26a0: 20 72 65 74 75 72 6e 20 47 65 74 43 61 6e 63 65   return GetCance
26b0: 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20  lCount() > 0;.. 
26c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
26d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2730: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2740: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73  ..    /// Resets
2750: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2760: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 5f 63 61  e <see cref="_ca
2770: 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69  ncelCount" /> fi
2780: 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  eld...    /// </
2790: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
27a0: 69 76 61 74 65 20 69 6e 74 20 52 65 73 65 74 43  ivate int ResetC
27b0: 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20  ancelCount()..  
27c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
27d0: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e  urn Interlocked.
27e0: 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28  CompareExchange(
27f0: 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  ref _cancelCount
2800: 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  , 0, _cancelCoun
2810: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
2820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
2890: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
28a0: 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65  Attempts to inte
28b0: 72 72 75 70 74 20 74 68 65 20 71 75 65 72 79 20  rrupt the query 
28c0: 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
28d0: 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63  ing on the assoc
28e0: 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e  iated..    /// n
28f0: 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63  ative database c
2900: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
2910: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2920: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2930: 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65  rride void Cance
2940: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
2950: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a    try..      {..
2960: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2970: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d  thing...      }.
2980: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f  .      finally /
2990: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
29a0: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
29b0: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a  n. */..      {..
29c0: 20 20 20 20 20 20 20 20 49 6e 74 65 72 6c 6f 63          Interloc
29d0: 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65  ked.Increment(re
29e0: 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b  f _cancelCount);
29f0: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
2a00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2a10: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
2a20: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  _sql);..      }.
2a30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2a40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2a50: 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69   /// This functi
2a60: 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d  on binds a user-
2a70: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
2a80: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
2a90: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
2aa0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2ab0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
2ac0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
2ad0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
2ae0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2af0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
2b00: 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  e"/> object inst
2b10: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
2b20: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74  .    /// the met
2b30: 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75  adata for the fu
2b40: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
2b50: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
2b60: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
2b70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
2b80: 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  tion">..    /// 
2b90: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
2ba0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e  QLiteFunction"/>
2bb0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2bc0: 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
2bd0: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75   the..    /// fu
2be0: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
2bf0: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
2c00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
2c10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
2c20: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
2c30: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
2c40: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
2c50: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
2c60: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
2c70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
2c80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2c90: 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28  id BindFunction(
2ca0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
2cb0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
2cc0: 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e functionAttrib
2cd0: 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ute,..        SQ
2ce0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
2cf0: 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
2d00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2d10: 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20  Flags flags..   
2d20: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
2d30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
2d40: 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69  ction.BindFuncti
2d50: 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69 6f  on(this, functio
2d60: 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63  nAttribute, func
2d70: 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a 0d  tion, flags);...
2d80: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75  .        if (_fu
2d90: 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  nctions == null)
2da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
2db0: 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c  unctions = new L
2dc0: 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ist<SQLiteFuncti
2dd0: 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  on>();....      
2de0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64 64    _functions.Add
2df0: 28 66 75 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20 20  (function);..   
2e00: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2e10: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
2e20: 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ng Version..    
2e30: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
2e40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2e50: 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73  eturn SQLiteVers
2e60: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ion;..      }.. 
2e70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2e80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
2e90: 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  t VersionNumber.
2ea0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2eb0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2ec0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2ed0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
2ee0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2ef0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2f00: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
2f10: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  fineConstants.. 
2f20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
2f30: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
2f40: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2f50: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
2f60: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
2f70: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
2f80: 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e     IList<string>
2f90: 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65   list = SQLiteDe
2fa0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70  fineConstants.Op
2fb0: 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  tionList;....   
2fc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73           if (lis
2fd0: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2fe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ff0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
3000: 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
3010: 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20  nt in list)..   
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
3050: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3070: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3090: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
30a0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
30d0: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30f0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d  sult.Append(elem
3100: 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
3110: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3120: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
3140: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
3150: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3160: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3170: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
3180: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a   SQLiteVersion..
3190: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
31a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
31b0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
31c0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
31d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
31e0: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
31f0: 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   -1);..      }..
3200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3210: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74  ernal static int
3220: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75   SQLiteVersionNu
3230: 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  mber..    {..   
3240: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
3250: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3260: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3270: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76  ods.sqlite3_libv
3280: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b  ersion_number();
3290: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
32a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
32b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
32c0: 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20  QLiteSourceId.. 
32d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
32e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
32f0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
3300: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
3310: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3320: 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  3_sourceid(), -1
3330: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
3340: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3350: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
3360: 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70   SQLiteCompileOp
3370: 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  tions..    {..  
3380: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33a0: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
33b0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
33c0: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  ingBuilder();.. 
33d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
33e0: 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ndex = 0;..     
33f0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 56         IntPtr zV
3400: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
3410: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3420: 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
3430: 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a  _get(index++);..
3440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ..            wh
3450: 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20 49  ile (zValue != I
3460: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
3470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3490: 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20  result.Length > 
34a0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
34b0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
34c0: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34e0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54 46  esult.Append(UTF
34f0: 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75 65  8ToString(zValue
3500: 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  , -1));..       
3510: 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65 20           zValue 
3520: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3530: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
3540: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
3550: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20  index++);..     
3560: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
3580: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
3590: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
35a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
35b0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
35c0: 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  g InteropVersion
35d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
35e0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
35f0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
3600: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
3610: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
3620: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
3630: 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72  iveMethods.inter
3640: 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  op_libversion(),
3650: 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   -1);..#else..  
3660: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3670: 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a   null;..#endif..
3680: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
3690: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
36a0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49   static string I
36b0: 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a  nteropSourceId..
36c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
36d0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
36e0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
36f0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
3700: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
3710: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
3720: 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70  eMethods.interop
3730: 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29  _sourceid(), -1)
3740: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
3750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
3760: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
3770: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
3780: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
3790: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
37a0: 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  opCompileOptions
37b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
37c0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
37d0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
37e0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
37f0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
3800: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
3810: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
3820: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
3830: 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  index = 0;..    
3840: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
3850: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
3860: 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65  tiveMethods.inte
3870: 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  rop_compileoptio
3880: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
3890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
38a0: 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20  hile (zValue != 
38b0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
38c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
38e0: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
38f0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
3900: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3910: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54  result.Append(UT
3940: 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75  F8ToString(zValu
3950: 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  e, -1));..      
3960: 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65            zValue
3970: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3980: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63  ethods.interop_c
3990: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
39a0: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20  (index++);..    
39b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
39c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
39d0: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
39e0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
39f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
3a00: 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
3a10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3a20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3a30: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
3a40: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
3a50: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
3a60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3a70: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
3a80: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
3a90: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3aa0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3ab0: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
3ac0: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
3ad0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
3ae0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
3af0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
3b00: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
3b10: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3b20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3b30: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
3b40: 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66  id(_sql);..#elif
3b50: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3b60: 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  D..        long 
3b70: 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowId = 0;..    
3b80: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3b90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3ba0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
3bb0: 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  d_interop(_sql, 
3bc0: 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
3bd0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49       return rowI
3be0: 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  d;..#else..     
3bf0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
3c00: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
3c10: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
3c20: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3c30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3c40: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
3c50: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
3c60: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
3c70: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
3c80: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
3c90: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
3ca0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3cb0: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
3cc0: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
3cd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3ce0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3cf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
3d00: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
3d10: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
3d20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3d30: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
3d40: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
3d50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
3d60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3d70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
3d80: 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b  taticMemoryUsed;
3d90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3da0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3db0: 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53  al static long S
3dc0: 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d  taticMemoryUsed.
3dd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3de0: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
3df0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
3e00: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3e20: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
3e30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
3e40: 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23  emory_used();..#
3e50: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
3e60: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
3e70: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
3e80: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
3e90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3ea0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
3eb0: 72 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28  ry_used_interop(
3ec0: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
3ed0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3ee0: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
3ef0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
3f00: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
3f10: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
3f20: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
3f30: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3f40: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3f50: 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69  de long MemoryHi
3f60: 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a  ghwater..    {..
3f70: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
3f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3f90: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
3fa0: 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72  cMemoryHighwater
3fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3fc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3fd0: 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  nal static long 
3fe0: 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68  StaticMemoryHigh
3ff0: 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  water..    {..  
4000: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4010: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
4020: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
4030: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
4040: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
4050: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4060: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
4070: 77 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66  water(0);..#elif
4080: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4090: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
40a0: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
40c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
40d0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68  sqlite3_memory_h
40e0: 69 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70  ighwater_interop
40f0: 28 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d  (0, ref bytes);.
4100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4110: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
4120: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
4130: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
4140: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
4150: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
4160: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4170: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4180: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
4190: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  rns non-zero if 
41a0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e  the underlying n
41b0: 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ative connection
41c0: 20 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64   handle is owned
41d0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69  ..    /// by thi
41e0: 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  s instance...   
41f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4200: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4210: 65 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48  erride bool OwnH
4220: 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  andle..    {..  
4230: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4250: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
4260: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4270: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
4280: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
4290: 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  no connection ha
42a0: 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29  ndle available")
42b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
42c0: 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e   return _sql.Own
42d0: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
42e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
42f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4300: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
4310: 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  de SetMemoryStat
4320: 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a  us(bool value)..
4330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4340: 65 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d  eturn StaticSetM
4350: 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75  emoryStatus(valu
4360: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
4370: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4380: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
4390: 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72  e StaticSetMemor
43a0: 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c  yStatus(bool val
43b0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
43c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
43d0: 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
43e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
43f0: 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28  ite3_config_int(
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
4410: 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
4420: 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
4430: 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65  MEMSTATUS, value
4440: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20   ? 1 : 0);....  
4450: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
4460: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
4470: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
4480: 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
4490: 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 68  o free as much h
44a0: 65 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f  eap memory as po
44b0: 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 64  ssible for the d
44c0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
44d0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
44e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
44f0: 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e   <returns>A stan
4500: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
4510: 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65  rn code (i.e. ze
4520: 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61  ro for success a
4530: 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20  nd non-zero for 
4540: 66 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72  failure).</retur
4550: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
4560: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
4570: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61  eErrorCode Relea
4580: 73 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20  seMemory()..    
4590: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
45a0: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
45b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
45c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72  ods.sqlite3_db_r
45d0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73  elease_memory(_s
45e0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  ql);..        re
45f0: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
4600: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
4610: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
4620: 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e  tempts to free N
4630: 20 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d   bytes of heap m
4640: 65 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63  emory by dealloc
4650: 61 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74  ating non-essent
4660: 69 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ial memory..    
4670: 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  /// allocations 
4680: 68 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61  held by the data
4690: 62 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65  base library. Me
46a0: 6d 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63  mory used to cac
46b0: 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
46c0: 73 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d  s..    /// to im
46d0: 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63  prove performanc
46e0: 65 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20  e is an example 
46f0: 6f 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  of non-essential
4700: 20 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69   memory.  This i
4710: 73 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f  s a no-op..    /
4720: 2f 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72  // returning zer
4730: 6f 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  o if the SQLite 
4740: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73  core library was
4750: 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69   not compiled wi
4760: 74 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  th the compile-t
4770: 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74  ime..    /// opt
4780: 69 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ion SQLITE_ENABL
4790: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
47a0: 45 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79  ENT.  Optionally
47b0: 2c 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65  , attempts to re
47c0: 73 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20  set and/or..    
47d0: 2f 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20  /// compact the 
47e0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
47f0: 70 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65  p, if applicable
4800: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4810: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4820: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74  param name="nByt
4830: 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  es">..    /// Th
4840: 65 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62  e requested numb
4850: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66  er of bytes to f
4860: 72 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ree...    /// </
4870: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4880: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
4890: 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  et">..    /// No
48a0: 6e 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70  n-zero to attemp
48b0: 74 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d  t a heap reset..
48c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
48d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
48e0: 6d 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22  m name="compact"
48f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
4900: 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68  ero to attempt h
4910: 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d  eap compaction..
4920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
4930: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4940: 6d 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d  m name="nFree">.
4950: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
4960: 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74  ber of bytes act
4970: 75 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68  ually freed.  Th
4980: 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  is value may be 
4990: 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
49a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
49b0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
49c0: 73 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f  setOk">..    ///
49d0: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
49e0: 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20   be non-zero if 
49f0: 74 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77  the heap reset w
4a00: 61 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a  as successful...
4a10: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
4a20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4a30: 20 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22   name="nLargest"
4a40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73  >..    /// The s
4a50: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
4a60: 73 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65  st committed fre
4a70: 65 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68  e block in the h
4a80: 65 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a  eap, in bytes...
4a90: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
4aa0: 75 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20  ue will be zero 
4ab0: 75 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70  unless heap comp
4ac0: 61 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  action is enable
4ad0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
4ae0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4af0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
4b00: 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
4b10: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28  te return code (
4b20: 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75  i.e. zero for su
4b30: 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65  ccess and non-ze
4b40: 72 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20  ro..    /// for 
4b50: 66 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f  failure)...    /
4b60: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
4b70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4b80: 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
4b90: 64 65 20 53 74 61 74 69 63 52 65 6c 65 61 73 65  de StaticRelease
4ba0: 4d 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  Memory(..       
4bb0: 20 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20   int nBytes,..  
4bc0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74        bool reset
4bd0: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
4be0: 63 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20  compact,..      
4bf0: 20 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65 2c    ref int nFree,
4c00: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f  ..        ref bo
4c10: 6f 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20  ol resetOk,..   
4c20: 20 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e 4c       ref uint nL
4c30: 61 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20 20  argest..        
4c40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4c50: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4c60: 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72  e rc = SQLiteErr
4c70: 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20  orCode.Ok;....  
4c80: 20 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65 4c        int nFreeL
4c90: 6f 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74  ocal = UnsafeNat
4ca0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4cb0: 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  e3_release_memor
4cc0: 79 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20  y(nBytes);..    
4cd0: 20 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65 73      uint nLarges
4ce0: 74 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20  tLocal = 0;..   
4cf0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f       bool resetO
4d00: 6b 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d  kLocal = false;.
4d10: 0a 0d 0a 23 69 66 20 21 44 45 42 55 47 20 26 26  ...#if !DEBUG &&
4d20: 20 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45   WINDOWS // NOTE
4d30: 3a 20 53 68 6f 75 6c 64 20 62 65 20 22 57 49 4e  : Should be "WIN
4d40: 33 32 48 45 41 50 20 26 26 20 21 4d 45 4d 44 45  32HEAP && !MEMDE
4d50: 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53 22 0d  BUG && WINDOWS".
4d60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63  .        if ((rc
4d70: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4d80: 6f 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74  ode.Ok) && reset
4d90: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4da0: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
4db0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4dc0: 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ds.sqlite3_win32
4dd0: 5f 72 65 73 65 74 5f 68 65 61 70 28 29 3b 0d 0a  _reset_heap();..
4de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4df0: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
4e00: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
4e20: 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65  etOkLocal = true
4e30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
4e40: 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20          if ((rc 
4e50: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4e60: 64 65 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61 63  de.Ok) && compac
4e70: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
4e80: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
4e90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4ea0: 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68  _win32_compact_h
4eb0: 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74  eap(ref nLargest
4ec0: 4c 6f 63 61 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  Local);..#else..
4ed0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 65          if (rese
4ee0: 74 20 7c 7c 20 63 6f 6d 70 61 63 74 29 0d 0a 20  t || compact).. 
4ef0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
4f00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4f10: 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 23 65 6e 64 69  NotFound;..#endi
4f20: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e 46 72  f....        nFr
4f30: 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61 6c 3b  ee = nFreeLocal;
4f40: 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61 72 67 65  ..        nLarge
4f50: 73 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c 6f 63  st = nLargestLoc
4f60: 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  al;..        res
4f70: 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b 4c 6f  etOk = resetOkLo
4f80: 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cal;....        
4f90: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
4fa0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
4fb0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4fc0: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
4fd0: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
4fe0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
4ff0: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
5000: 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  erent..    /// c
5010: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
5020: 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64  ions.  We depend
5030: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
5040: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
5050: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
5060: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5070: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
5080: 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s a standard SQL
5090: 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e  ite result code.
50a0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
50b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
50c0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
50d0: 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20  e Shutdown()..  
50e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
50f0: 75 72 6e 20 53 74 61 74 69 63 53 68 75 74 64 6f  urn StaticShutdo
5100: 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  wn(false);..    
5110: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
5120: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5130: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
5140: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
5150: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
5160: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
5170: 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  erent..    /// c
5180: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
5190: 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64  ions.  We depend
51a0: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
51b0: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
51c0: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
51d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
51e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
51f0: 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20 20  rectories">..   
5200: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
5210: 20 72 65 73 65 74 20 74 68 65 20 64 61 74 61 62   reset the datab
5220: 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
5230: 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f  y directories to
5240: 20 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f 20   their..    /// 
5250: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values, 
5260: 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be 
5270: 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20 20  null for both.  
5280: 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 68  This parameter h
5290: 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65  as no..    /// e
52a0: 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e  ffect on non-Win
52b0: 64 6f 77 73 20 6f 70 65 72 61 74 69 6e 67 20 73  dows operating s
52c0: 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ystems...    ///
52d0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
52e0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
52f0: 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53  rns a standard S
5300: 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64  QLite result cod
5310: 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
5320: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
5330: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
5340: 65 20 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e  e StaticShutdown
5350: 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  (..        bool 
5360: 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 20 20 20  directories..   
5370: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
5380: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
5390: 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69  orCode rc = SQLi
53a0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
53b0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
53c0: 69 72 65 63 74 6f 72 69 65 73 29 0d 0a 20 20 20  irectories)..   
53d0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
53e0: 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
53f0: 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
5400: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5420: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
5430: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5440: 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
5450: 74 6f 72 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a  tory(1, null);..
5460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
5470: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
5480: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
54a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
54b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
54c0: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
54d0: 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c  y(2, null);..#el
54e0: 73 65 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  se..#if !NET_COM
54f0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
5500: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
5510: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
5520: 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
5530: 20 20 20 20 20 20 20 20 20 20 20 22 53 68 75 74             "Shut
5540: 64 6f 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73  down: Cannot res
5550: 65 74 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f  et directories o
5560: 6e 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e  n this platform.
5570: 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6e  ");..#endif..#en
5580: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
5590: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 63  ..        if (rc
55a0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
55b0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
55c0: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
55d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
55e0: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29  lite3_shutdown()
55f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
5600: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
5610: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5620: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
5630: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61  ermines if the a
5640: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
5650: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
5660: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
5670: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5680: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
5690: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
56a0: 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f  zero if the asso
56b0: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
56c0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
56d0: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
56e0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
56f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5700: 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28  ide bool IsOpen(
5710: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5720: 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21    return (_sql !
5730: 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c  = null) && !_sql
5740: 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f  .IsInvalid && !_
5750: 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20  sql.IsClosed;.. 
5760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5770: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
5780: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
5790: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72 69  trFilename, stri
57a0: 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c 69  ng vfsName, SQLi
57b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
57c0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
57d0: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
57e0: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
57f0: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
5800: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
5810: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f  ..    {..      /
5820: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
5830: 3a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  : If the databas
5840: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
5850: 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
5860: 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20  attempt to..    
5870: 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65    //       close
5880: 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d   it now.  This m
5890: 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61  ust be done beca
58a0: 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d  use the file nam
58b0: 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20  e or..      //  
58c0: 20 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d       other param
58d0: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69  eters that may i
58e0: 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c  mpact the underl
58f0: 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20  ying database.. 
5900: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
5910: 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  nnection may hav
5920: 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20  e changed...    
5930: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
5940: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c  _sql != null) Cl
5950: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  ose(true);....  
5960: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
5970: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
5980: 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  nnection was not
5990: 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66   closed successf
59a0: 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a  ully, throw an..
59b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
59c0: 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20  xception now... 
59d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
59e0: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
59f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ..          thro
5a00: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5a10: 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f  ption("connectio
5a20: 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c  n handle is stil
5a30: 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20  l active");.... 
5a40: 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
5a50: 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20  usePool;..      
5a60: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46  _fileName = strF
5a70: 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ilename;....    
5a80: 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a    if (usePool)..
5a90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5aa0: 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f   _sql = SQLiteCo
5ab0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d  nnectionPool.Rem
5ac0: 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ove(strFilename,
5ad0: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75   maxPoolSize, ou
5ae0: 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  t _poolVersion);
5af0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
5b00: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
5b10: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
5b20: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
5b30: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
5b40: 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a  at("Open (Pool):
5b50: 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20   {0}", (_sql != 
5b60: 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53  null) ? _sql.ToS
5b70: 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c  tring() : "<null
5b80: 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  >"));..#endif.. 
5b90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5ba0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
5bb0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
5bc0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
5bd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5be0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5c00: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
5c10: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
5c20: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
5c30: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
5c40: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64          IntPtr d
5c50: 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  b = IntPtr.Zero;
5c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
5c70: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
5c80: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
5c90: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
5ca0: 20 20 69 6e 74 20 65 78 74 46 75 6e 63 73 20 3d    int extFuncs =
5cb0: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
5cc0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5cd0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
5ce0: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
5cf0: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
5d00: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65  tionFlags.NoExte
5d10: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20  nsionFunctions) 
5d20: 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20  ? 1 : 0;....    
5d30: 20 20 20 20 20 20 69 66 20 28 65 78 74 46 75 6e        if (extFun
5d40: 63 73 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  cs != 0)..      
5d50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5d60: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
5d70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5d80: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
5d90: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
5da0: 6d 65 29 2c 20 54 6f 55 54 46 38 28 76 66 73 4e  me), ToUTF8(vfsN
5db0: 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  ame), openFlags,
5dc0: 20 65 78 74 46 75 6e 63 73 2c 20 72 65 66 20 64   extFuncs, ref d
5dd0: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  b);..          }
5de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
5df0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5e00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5e10: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
5e20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5e30: 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46  e3_open_v2(ToUTF
5e40: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
5e50: 72 65 66 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67  ref db, openFlag
5e60: 73 2c 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d  s, ToUTF8(vfsNam
5e70: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
5e80: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
5e90: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
5ea0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
5eb0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
5ec0: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
5ed0: 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d  ormat("Open: {0}
5ee0: 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66  ", db));..#endif
5ef0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
5f00: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
5f10: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
5f20: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
5f30: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
5f40: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
5f50: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
5f60: 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20  ctionHandle(db, 
5f70: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
5f80: 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  }..        lock 
5f90: 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b  (_sql) { /* HACK
5fa0: 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63  : Force the Sync
5fb0: 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65  Block to be "cre
5fc0: 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d  ated" now. */ }.
5fd0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
5fe0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
5ff0: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
6000: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
6010: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
6020: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
6030: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43  onEventType.NewC
6040: 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e  riticalHandle, n
6050: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
6060: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
6070: 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c  ll, _sql, strFil
6080: 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63  ename, new objec
6090: 74 5b 5d 20 7b 20 73 74 72 46 69 6c 65 6e 61 6d  t[] { strFilenam
60a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
60b0: 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74  vfsName, connect
60c0: 69 6f 6e 46 6c 61 67 73 2c 20 6f 70 65 6e 46 6c  ionFlags, openFl
60d0: 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65  ags, maxPoolSize
60e0: 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a  , usePool }));..
60f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6100: 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f   // Bind functio
6110: 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65  ns to this conne
6120: 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70  ction.  If any p
6130: 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e  revious function
6140: 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  s of the same na
6150: 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72  me..      // wer
6160: 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c  e already bound,
6170: 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69   then the new bi
6180: 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74  ndings replace t
6190: 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69  he old...      i
61a0: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
61b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
61c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69  ectionFlags.NoBi
61d0: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  ndFunctions) != 
61e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
61f0: 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63  Flags.NoBindFunc
6200: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d  tions)..      {.
6210: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
6220: 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c  functions == nul
6230: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6240: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e    _functions = n
6250: 65 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75  ew List<SQLiteFu
6260: 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20  nction>();....  
6270: 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f          _functio
6280: 6e 73 2e 41 64 64 52 61 6e 67 65 28 6e 65 77 20  ns.AddRange(new 
6290: 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74  List<SQLiteFunct
62a0: 69 6f 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63 74  ion>(SQLiteFunct
62b0: 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e  ion.BindFunction
62c0: 73 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69  s(this, connecti
62d0: 6f 6e 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20 20  onFlags)));..   
62e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65     }....      Se
62f0: 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20  tTimeout(0);..  
6300: 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65      GC.KeepAlive
6310: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
6320: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6330: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65  verride void Cle
6340: 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d  arPool()..    {.
6350: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
6360: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61  nectionPool.Clea
6370: 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29  rPool(_fileName)
6380: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6390: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
63a0: 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28  e int CountPool(
63b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
63c0: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72    Dictionary<str
63d0: 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73  ing, int> counts
63e0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
63f0: 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20    int openCount 
6400: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  = 0;..        in
6410: 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30  t closeCount = 0
6420: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74  ;..        int t
6430: 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a  otalCount = 0;..
6440: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6450: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47  ConnectionPool.G
6460: 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61  etCounts(_fileNa
6470: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
6480: 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66   ref counts, ref
6490: 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20   openCount, ref 
64a0: 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20  closeCount,..   
64b0: 20 20 20 20 20 20 20 20 20 72 65 66 20 74 6f 74           ref tot
64c0: 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  alCount);....   
64d0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61       return tota
64e0: 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a  lCount;..    }..
64f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6500: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
6510: 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d  Timeout(int nTim
6520: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a  eoutMS)..    {..
6530: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 20        IntPtr db 
6540: 3d 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20 69  = _sql;..      i
6550: 66 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e  f (db == IntPtr.
6560: 5a 65 72 6f 29 20 74 68 72 6f 77 20 6e 65 77 20  Zero) throw new 
6570: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6580: 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  "no connection h
6590: 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22  andle available"
65a0: 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
65b0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
65c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
65d0: 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  s.sqlite3_busy_t
65e0: 69 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d 65  imeout(db, nTime
65f0: 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69  outMS);..      i
6600: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6610: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6620: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6630: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6640: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
6650: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6660: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
6670: 74 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tep(SQLiteStatem
6680: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
6690: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
66a0: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
66b0: 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e    Random rnd = n
66c0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  ull;..      uint
66d0: 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69   starttick = (ui
66e0: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
66f0: 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  ickCount;..     
6700: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20   uint timeout = 
6710: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
6720: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
6730: 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d  eout * 1000);...
6740: 0a 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63  .      ResetCanc
6750: 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20  elCount();....  
6760: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
6770: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6780: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
6790: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
67a0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
67b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
67c0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
67d0: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
67e0: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
67f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6800: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
6810: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6820: 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74  qlite3_step(stmt
6830: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
6840: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6850: 20 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64        if (Should
6860: 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29  ThrowForCancel()
6870: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6880: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
6890: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
68a0: 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20  ode.Ok) ||..    
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d              (n =
68c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
68d0: 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20  e.Row) ||..     
68e0: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
68f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6900: 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  .Done))..       
6910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6920: 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69          n = SQLi
6930: 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65  teErrorCode.Inte
6940: 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20  rrupt;..        
6950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6960: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
6970: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6980: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
6990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
69a0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
69b0: 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70  rorCode.Interrup
69c0: 74 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  t) return false;
69d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
69e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
69f0: 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74  de.Row) return t
6a00: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  rue;..        if
6a10: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
6a20: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74  orCode.Done) ret
6a30: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
6a40: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
6a50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6a60: 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  k)..        {.. 
6a70: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
6a80: 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20  rrorCode r;.... 
6a90: 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65           // An e
6aa0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61  rror occurred, a
6ab0: 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20  ttempt to reset 
6ac0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  the statement.  
6ad0: 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72  If the reset wor
6ae0: 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d  ked because the.
6af0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63  .          // sc
6b00: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
6b10: 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65  , re-try the ste
6b20: 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20  p again.  If it 
6b30: 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61  errored our beca
6b40: 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  use the database
6b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69  ..          // i
6b60: 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b  s locked, then k
6b70: 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74  eep retrying unt
6b80: 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74  il the command t
6b90: 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a  imeout occurs...
6ba0: 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65            r = Re
6bb0: 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  set(stmt);....  
6bc0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
6bd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6be0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6bf0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
6c00: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
6c10: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
6c20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ...          els
6c30: 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69  e if ((r == SQLi
6c40: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
6c50: 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74  ed || r == SQLit
6c60: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
6c70: 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e   && stmt._comman
6c80: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
6c90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6ca0: 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79       // Keep try
6cb0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
6cc0: 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c   if (rnd == null
6cd0: 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20  ) // First time 
6ce0: 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65  we've encountere
6cf0: 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20  d the lock..    
6d00: 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20            rnd = 
6d10: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d  new Random();...
6d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
6d30: 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65  If we've exceede
6d40: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20  d the command's 
6d50: 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70  timeout, give up
6d60: 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72   and throw an er
6d70: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
6d80: 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72   if ((uint)Envir
6d90: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
6da0: 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74   - starttick > t
6db0: 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20  imeout)..       
6dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6dd0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
6de0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6df0: 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  r, GetLastError(
6e00: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
6e10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6e20: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6e30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6e40: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
6e50: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
6e60: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
6e70: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
6e90: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
6ea0: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
6eb0: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
6ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6ee0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
6ef0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6f00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6f10: 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c 69 74  // Has the sqlit
6f20: 65 33 5f 65 72 72 73 74 72 28 29 20 63 6f 72 65  e3_errstr() core
6f30: 20 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65   library API bee
6f40: 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65  n checked for ye
6f50: 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  t?..    /// If s
6f60: 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74  o, is it present
6f70: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ?..    /// </sum
6f80: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
6f90: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
6fa0: 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 6e 75  have_errstr = nu
6fb0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ll;....    /// <
6fc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6fd0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 72  / Returns the er
6fe0: 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
6ff0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 53 51  the specified SQ
7000: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
7010: 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20   using..    /// 
7020: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
7030: 74 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66  tr() function, f
7040: 61 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20 74  alling back to t
7050: 68 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b  he internal look
7060: 75 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c  up..    /// tabl
7070: 65 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d  e if necessary..
7080: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7090: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
70a0: 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68  ram name="rc">Th
70b0: 65 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  e SQLite return 
70c0: 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  code.</param>.. 
70d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
70e0: 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
70f0: 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20  e or null if it 
7100: 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e  cannot be found.
7110: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
7120: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
7130: 73 74 72 69 6e 67 20 47 65 74 45 72 72 6f 72 53  string GetErrorS
7140: 74 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f  tring(SQLiteErro
7150: 72 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b  rCode rc)..    {
7160: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
7170: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7180: 20 20 20 20 20 20 69 66 20 28 68 61 76 65 5f 65        if (have_e
7190: 72 72 73 74 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rrstr == null)..
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
71c0: 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72  nt versionNumber
71d0: 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e   = SQLiteVersion
71e0: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20  Number;..       
71f0: 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 65 72           have_er
7200: 72 73 74 72 20 3d 20 28 76 65 72 73 69 6f 6e 4e  rstr = (versionN
7210: 75 6d 62 65 72 20 3e 3d 20 33 30 30 37 30 31 35  umber >= 3007015
7220: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7230: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7240: 20 69 66 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f   if ((bool)have_
7250: 65 72 72 73 74 72 29 0d 0a 20 20 20 20 20 20 20  errstr)..       
7260: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7270: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
7280: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
7290: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
72a0: 5f 65 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a  _errstr(rc);....
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72c0: 69 66 20 28 70 74 72 20 21 3d 20 49 6e 74 50 74  if (ptr != IntPt
72d0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
72e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
72f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
7300: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7320: 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50  return Marshal.P
7330: 74 72 54 6f 53 74 72 69 6e 67 41 6e 73 69 28 70  trToStringAnsi(p
7340: 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7360: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
7370: 72 69 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a  ring(ptr, -1);..
7380: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
73a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
73b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74    }..        cat
73c0: 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f  ch (EntryPointNo
73d0: 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29  tFoundException)
73e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
73f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
7400: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
7410: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
7420: 74 75 72 6e 20 46 61 6c 6c 62 61 63 6b 47 65 74  turn FallbackGet
7430: 45 72 72 6f 72 53 74 72 69 6e 67 28 72 63 29 3b  ErrorString(rc);
7440: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
7450: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7460: 20 20 2f 2f 2f 20 48 61 73 20 74 68 65 20 73 71    /// Has the sq
7470: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
7480: 6e 6c 79 28 29 20 63 6f 72 65 20 6c 69 62 72 61  nly() core libra
7490: 72 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63  ry API been chec
74a0: 6b 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20  ked for yet?..  
74b0: 20 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20    /// If so, is 
74c0: 69 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20  it present?..   
74d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
74e0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
74f0: 74 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 73  tic bool? have_s
7500: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 6e  tmt_readonly = n
7510: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ull;....    /// 
7520: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7530: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
7540: 65 72 6f 20 69 66 20 74 68 65 20 73 70 65 63 69  ero if the speci
7550: 66 69 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  fied statement i
7560: 73 20 72 65 61 64 2d 6f 6e 6c 79 20 69 6e 20 6e  s read-only in n
7570: 61 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ature...    /// 
7580: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7590: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
75a0: 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
75b0: 6d 65 6e 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ment to check.</
75c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
75d0: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
75e0: 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79   the outer query
75f0: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f   is read-only.</
7600: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
7610: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7620: 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28  bool IsReadOnly(
7630: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7640: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 0d 0a  Statement stmt..
7650: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
7660: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
7670: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7680: 20 20 20 20 20 20 69 66 20 28 68 61 76 65 5f 73        if (have_s
7690: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 3d 20  tmt_readonly == 
76a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
76b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
76c0: 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f        int versio
76d0: 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65  nNumber = SQLite
76e0: 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a  VersionNumber;..
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
7710: 6c 79 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d  ly = (versionNum
7720: 62 65 72 20 3e 3d 20 33 30 30 37 30 30 34 29 3b  ber >= 3007004);
7730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7740: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7750: 66 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 73 74  f ((bool)have_st
7760: 6d 74 5f 72 65 61 64 6f 6e 6c 79 29 0d 0a 20 20  mt_readonly)..  
7770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7790: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
77a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
77b0: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a  stmt_readonly(..
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
77e0: 5f 73 74 6d 74 29 20 21 3d 20 30 3b 0d 0a 20 20  _stmt) != 0;..  
77f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7810: 63 61 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e  catch (EntryPoin
7820: 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69  tNotFoundExcepti
7830: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  on)..        {..
7840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7850: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7870: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 20 2f   return false; /
7880: 2a 20 4e 4f 54 45 3a 20 55 6e 6b 6e 6f 77 6e 2c  * NOTE: Unknown,
7890: 20 61 73 73 75 6d 65 20 66 61 6c 73 65 2e 20 2a   assume false. *
78a0: 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  /..    }....    
78b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
78c0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
78d0: 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74  e Reset(SQLiteSt
78e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
78f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
7900: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
7910: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
7920: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
7930: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7940: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
7950: 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  set_interop(stmt
7960: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
7970: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
7980: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7990: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
79a0: 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  set(stmt._sqlite
79b0: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  _stmt);..#endif.
79c0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74  ...      // If t
79d0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
79e0: 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72  d, try and re-pr
79f0: 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20  epare it..      
7a00: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
7a10: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
7a20: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
7a30: 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61     // Recreate a
7a40: 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74   dummy statement
7a50: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
7a60: 20 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   str = null;..  
7a70: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
7a80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70  iteStatement tmp
7a90: 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c   = Prepare(null,
7aa0: 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d   stmt._sqlStatem
7ab0: 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74  ent, null, (uint
7ac0: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
7ad0: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
7ae0: 2a 20 31 30 30 30 29 2c 20 72 65 66 20 73 74 72  * 1000), ref str
7af0: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
7b00: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61           // Fina
7b10: 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e  lize the existin
7b20: 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  g statement..   
7b30: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
7b40: 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65  ite_stmt.Dispose
7b50: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ();..          /
7b60: 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77  / Reassign a new
7b70: 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74   statement point
7b80: 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74  er to the old st
7b90: 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61  atement and clea
7ba0: 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  r the temporary 
7bb0: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 69  one..          i
7bc0: 66 20 28 74 6d 70 20 21 3d 20 6e 75 6c 6c 29 0d  f (tmp != null).
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
7be0: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
7bf0: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d  sqlite_stmt = tm
7c00: 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  p._sqlite_stmt;.
7c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 6d 70  .            tmp
7c20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20  ._sqlite_stmt = 
7c30: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7c40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7c50: 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d  // Reapply param
7c60: 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  eters..         
7c70: 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65   stmt.BindParame
7c80: 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ters();..       
7c90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
7ca0: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
7cb0: 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52  de.Unknown; // R
7cc0: 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74  eset was OK, wit
7cd0: 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d  h schema change.
7ce0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
7cf0: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
7d00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
7d10: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
7d20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
7d30: 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  y)..        retu
7d40: 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  rn n;....      i
7d50: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
7d60: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
7d70: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7d80: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7d90: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
7da0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
7db0: 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65  rn n; // We rese
7dc0: 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20  t OK, no schema 
7dd0: 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a  changes..    }..
7de0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7df0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
7e00: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20  etLastError().. 
7e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
7e20: 74 75 72 6e 20 47 65 74 4c 61 73 74 45 72 72 6f  turn GetLastErro
7e30: 72 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d  r(null);..    }.
7e40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7e50: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
7e60: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 73 74 72  GetLastError(str
7e70: 69 6e 67 20 64 65 66 56 61 6c 75 65 29 0d 0a 20  ing defValue).. 
7e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74     {..        st
7e90: 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 53 51  ring result = SQ
7ea0: 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74  LiteBase.GetLast
7eb0: 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c  Error(_sql, _sql
7ec0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
7ed0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
7ee0: 6d 70 74 79 28 72 65 73 75 6c 74 29 29 20 72 65  mpty(result)) re
7ef0: 73 75 6c 74 20 3d 20 64 65 66 56 61 6c 75 65 3b  sult = defValue;
7f00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7f10: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d   result;..    }.
7f20: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
7f90: 65 67 69 6f 6e 20 51 75 65 72 79 20 44 69 61 67  egion Query Diag
7fa0: 6e 6f 73 74 69 63 73 20 53 75 70 70 6f 72 74 0d  nostics Support.
7fb0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7fc0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7fd0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7fe0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
7ff0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 74   field is used t
8000: 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20  o keep track of 
8010: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
8020: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 53 51 4c  he..    /// "SQL
8030: 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70  ite_ForceLogPrep
8040: 61 72 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  are" environment
8050: 20 76 61 72 69 61 62 6c 65 20 68 61 73 20 62 65   variable has be
8060: 65 6e 20 71 75 65 72 69 65 64 2e 20 20 49 66 20  en queried.  If 
8070: 73 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20  so,..    /// it 
8080: 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 6e 6f 6e  will only be non
8090: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 65 6e 76  -zero if the env
80a0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
80b0: 65 20 77 61 73 20 70 72 65 73 65 6e 74 2e 0d 0a  e was present...
80c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
80d0: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
80e0: 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 66 6f 72  static bool? for
80f0: 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 6e  ceLogPrepare = n
8100: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ull;....    ////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8170: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8180: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
8190: 69 6e 65 73 20 69 66 20 61 6c 6c 20 63 61 6c 6c  ines if all call
81a0: 73 20 74 6f 20 70 72 65 70 61 72 65 20 61 20 53  s to prepare a S
81b0: 51 4c 20 71 75 65 72 79 20 77 69 6c 6c 20 62 65  QL query will be
81c0: 20 6c 6f 67 67 65 64 2c 0d 0a 20 20 20 20 2f 2f   logged,..    //
81d0: 2f 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  / regardless of 
81e0: 74 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  the flags for th
81f0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e  e associated con
8200: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
8210: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8220: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
8230: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
8240: 6f 20 74 6f 20 6c 6f 67 20 61 6c 6c 20 63 61 6c  o to log all cal
8250: 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20 61 20  ls to prepare a 
8260: 53 51 4c 20 71 75 65 72 79 2e 0d 0a 20 20 20 20  SQL query...    
8270: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
8280: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
8290: 69 63 20 62 6f 6f 6c 20 46 6f 72 63 65 4c 6f 67  ic bool ForceLog
82a0: 50 72 65 70 61 72 65 28 29 0d 0a 20 20 20 20 7b  Prepare()..    {
82b0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
82c0: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
82d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
82e0: 20 20 69 66 20 28 66 6f 72 63 65 4c 6f 67 50 72    if (forceLogPr
82f0: 65 70 61 72 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  epare == null)..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8320: 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f (UnsafeNativeM
8330: 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69 6e  ethods.GetSettin
8340: 67 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  gValue(..       
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8360: 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f   "SQLite_ForceLo
8370: 67 50 72 65 70 61 72 65 22 2c 20 6e 75 6c 6c 29  gPrepare", null)
8380: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8390: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83b0: 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72    forceLogPrepar
83c0: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
83d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
83f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8410: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65             force
8420: 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 66 61 6c  LogPrepare = fal
8430: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
8440: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8460: 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f 6f       return (boo
8470: 6c 29 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  l)forceLogPrepar
8480: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
8490: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
84a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
84b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
8520: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
8530: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65  iteStatement Pre
8540: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  pare(SQLiteConne
8550: 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e  ction cnn, strin
8560: 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65  g strSql, SQLite
8570: 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f  Statement previo
8580: 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74  us, uint timeout
8590: 4d 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20 73  MS, ref string s
85a0: 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b  trRemain)..    {
85b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72  ..      if (!Str
85c0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
85d0: 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20  y(strSql))..    
85e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
85f0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
8600: 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  : SQLite does no
8610: 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f  t support the co
8620: 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74  ncept of separat
8630: 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20  e schemas..     
8640: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f     //       in o
8650: 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65  ne database; the
8660: 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74  refore, remove t
8670: 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e  he base schema n
8680: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ame..        // 
8690: 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d        used to sm
86a0: 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e  ooth integration
86b0: 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e   with the base .
86c0: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20  NET Framework.. 
86d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
86e0: 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20  data classes... 
86f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
8700: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63     string baseSc
8710: 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20  hemaName = (cnn 
8720: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
8730: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a  baseSchemaName :
8740: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
8750: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
8760: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65  NullOrEmpty(base
8770: 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20  SchemaName))..  
8780: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8790: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
87a0: 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20  ql.Replace(..   
87b0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
87c0: 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  g.Format(Culture
87d0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
87e0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
87f0: 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20        "[{0}].", 
8800: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
8810: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
8820: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
8830: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
8840: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
8850: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
8860: 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  at(CultureInfo.I
8870: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
8880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8890: 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65  "{0}.", baseSche
88a0: 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e  maName), String.
88b0: 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20  Empty);..       
88c0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
88d0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
88e0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
88f0: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63   =..          (c
8900: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
8910: 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65  n.Flags : SQLite
8920: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8930: 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20  Default;....    
8940: 20 20 69 66 20 28 0d 0a 23 69 66 20 21 50 4c 41    if (..#if !PLA
8950: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
8960: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
8970: 20 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72    ForceLogPrepar
8980: 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a  e() ||..#endif..
8990: 20 20 20 20 20 20 20 20 20 20 28 28 66 6c 61 67            ((flag
89a0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
89b0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65  tionFlags.LogPre
89c0: 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43  pare) == SQLiteC
89d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
89e0: 6f 67 50 72 65 70 61 72 65 29 29 0d 0a 20 20 20  ogPrepare))..   
89f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8a00: 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e  if ((strSql == n
8a10: 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e  ull) || (strSql.
8a20: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20  Length == 0) || 
8a30: 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c  (strSql.Trim().L
8a40: 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20  ength == 0))..  
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8a60: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
8a70: 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f  ("Preparing {<no
8a80: 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20  thing>}...");.. 
8a90: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8ab0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
8ac0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
8ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ae0: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
8af0: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20  CurrentCulture, 
8b00: 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d  "Preparing {{{0}
8b10: 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29  }}...", strSql))
8b20: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
8b30: 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20      IntPtr stmt 
8b40: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
8b50: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
8b60: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
8b70: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
8b80: 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
8b90: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53  eErrorCode n = S
8ba0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
8bb0: 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e  chema;..      in
8bc0: 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a  t retries = 0;..
8bd0: 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d 75        int maximu
8be0: 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e 20  mRetries = (cnn 
8bf0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
8c00: 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3a  prepareRetries :
8c10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8c20: 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72 65  n.DefaultPrepare
8c30: 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20 20  Retries;..      
8c40: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
8c50: 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20  8(strSql);..    
8c60: 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66    string typedef
8c70: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
8c80: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
8c90: 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   cmd = null;..  
8ca0: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
8cb0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
8cc0: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
8cd0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
8ce0: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20  .TickCount;.... 
8cf0: 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c       ResetCancel
8d00: 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  Count();....    
8d10: 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c    GCHandle handl
8d20: 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c  e = GCHandle.All
8d30: 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79  oc(b, GCHandleTy
8d40: 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20  pe.Pinned);..   
8d50: 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d     IntPtr psql =
8d60: 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69   handle.AddrOfPi
8d70: 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20  nnedObject();.. 
8d80: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
8d90: 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65  mentHandle state
8da0: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  mentHandle = nul
8db0: 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20  l;..      try.. 
8dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8dd0: 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c  while ((n == SQL
8de0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
8df0: 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ema || n == SQLi
8e00: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
8e10: 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ed || n == SQLit
8e20: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
8e30: 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d 61   && retries < ma
8e40: 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a 20  ximumRetries).. 
8e50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e60: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
8e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8e80: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
8e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
8ea0: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
8eb0: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
8ec0: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
8ed0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
8ee0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8ef0: 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e    stmt = IntPtr.
8f00: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
8f10: 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e     ptr = IntPtr.
8f20: 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  Zero;....#if !SQ
8f30: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8f40: 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d             len =
8f50: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
8f60: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8f70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8f80: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
8f90: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
8fa0: 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73  ength - 1, ref s
8fb0: 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72 65  tmt, ref ptr, re
8fc0: 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f len);..#else..
8fd0: 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f  #if USE_PREPARE_
8fe0: 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  V2..            
8ff0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9000: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9010: 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c  prepare_v2(_sql,
9020: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
9030: 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72  - 1, ref stmt, r
9040: 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  ef ptr);..#else.
9050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
9060: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9070: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
9080: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
9090: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72   b.Length - 1, r
90a0: 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72  ef stmt, ref ptr
90b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
90c0: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31          len = -1
90d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
90e0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
90f0: 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d   && TRACE_STATEM
9100: 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ENT..           
9110: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
9120: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
9130: 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b  Prepare ({0}): {
9140: 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d  1}", n, stmt));.
9150: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
9160: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
9170: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9180: 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d  .Ok) && (stmt !=
9190: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
91c0: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
91d0: 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d   != null) statem
91e0: 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73  entHandle.Dispos
91f0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
9200: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e      statementHan
9210: 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dle = new SQLite
9220: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28  StatementHandle(
9230: 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20  _sql, stmt);..  
9240: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9250: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9260: 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d        if (statem
9270: 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c  entHandle != nul
9280: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
9290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
92a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
92b0: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
92c0: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
92d0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
92e0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
92f0: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
9300: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
9310: 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  e, null, null,..
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
9330: 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d  ll, null, statem
9340: 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71  entHandle, strSq
9350: 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  l, new object[] 
9360: 7b 20 63 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20  { cnn,..        
9370: 20 20 20 20 20 20 73 74 72 53 71 6c 2c 20 70 72        strSql, pr
9380: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
9390: 53 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  S }));..        
93a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
93b0: 20 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77   if (ShouldThrow
93c0: 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20  ForCancel())..  
93d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
93e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
93f0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9400: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
9420: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9430: 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20  de.Row) ||..    
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
9450: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9460: 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20  ode.Done))..    
9470: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9490: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
94a0: 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20  de.Interrupt;.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
94c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
94d0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
94e0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
94f0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  l);..          }
9500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
9510: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
9520: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
9530: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  )..            b
9540: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
9550: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
9560: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
9570: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20  chema)..        
9580: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
9590: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
95a0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
95b0: 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a  rorCode.Error)..
95c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
95d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
95e0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
95f0: 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61  astError(), "nea
9600: 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e  r \"TYPES\": syn
9610: 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69  tax error", Stri
9620: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
9630: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
9640: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
9650: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9660: 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74      int pos = st
9670: 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27  rSql.IndexOf(';'
9680: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9690: 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29    if (pos == -1)
96a0: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65   pos = strSql.Le
96b0: 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20  ngth - 1;....   
96c0: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64             typed
96d0: 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  efs = strSql.Sub
96e0: 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20  string(0, pos + 
96f0: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
9700: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
9710: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73  ql.Substring(pos
9720: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
9730: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
9740: 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20  n = "";....     
9750: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
9760: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
9770: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
9780: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9790: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
97a0: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
97b0: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
97c0: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
97d0: 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69  MS, ref strRemai
97e0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
97f0: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
9800: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
9810: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9820: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
9830: 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  md != null)..   
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
9850: 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65  .SetTypes(typede
9860: 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fs);....        
9870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
9880: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9890: 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c  ..#if (NET_35 ||
98a0: 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34   NET_40 || NET_4
98b0: 35 20 7c 7c 20 4e 45 54 5f 34 35 31 29 20 26 26  5 || NET_451) &&
98c0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
98d0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
98e0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
98f0: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
9900: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
9910: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
9920: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
9930: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
9940: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
9950: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
9960: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
9970: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
9980: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
99a0: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20  Remain = "";..  
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
99c0: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
99d0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
99e0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
99f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9a00: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
9a10: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
9a20: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
9a30: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
9a40: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
9a50: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
9a60: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
9a70: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
9a80: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
9a90: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9ab0: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
9ae0: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
9b00: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
9b10: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
9b20: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
9b30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
9b50: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
9b60: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
9b70: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
9b80: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
9bb0: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
9bc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9bd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9be0: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
9bf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9c00: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c30: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
9c40: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
9c50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9c60: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
9c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
9c80: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
9c90: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
9ca0: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
9cb0: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
9cc0: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
9cd0: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
9ce0: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
9cf0: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
9d00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9d10: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
9d20: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
9d30: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
9d40: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
9d50: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
9d60: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
9d80: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
9d90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9da0: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
9db0: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
9dc0: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
9dd0: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
9de0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
9df0: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
9e00: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
9e10: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
9e20: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
9e30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9e40: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9e50: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9e60: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
9e70: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
9e80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9e90: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9ea0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9eb0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
9ec0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
9ed0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
9ee0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
9ef0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
9f00: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
9f10: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
9f20: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
9f30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9f40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
9f50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9f60: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
9f70: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
9f80: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9f90: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
9fa0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9fb0: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
9fc0: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
9fd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9fe0: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
9ff0: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
a000: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a010: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
a020: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a030: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
a040: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
a050: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
a060: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a070: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
a080: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
a090: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
a0a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
a0b0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
a0c0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
a0d0: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
a0e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
a0f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a100: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a110: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a120: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a130: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
a140: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
a150: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
a160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
a170: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
a180: 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20   != null) cmd = 
a190: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
a1a0: 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c  ent(this, flags,
a1b0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
a1c0: 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  , strSql.Substri
a1d0: 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e  ng(0, strSql.Len
a1e0: 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e  gth - strRemain.
a1f0: 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75  Length), previou
a200: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  s);....        r
a210: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
a220: 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c    }..      final
a230: 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ly..      {..   
a240: 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65       handle.Free
a250: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
a260: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
a270: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
a280: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
a290: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
a2a0: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
a2b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a2c0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
a2d0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
a2e0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
a2f0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
a300: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
a310: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
a320: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
a330: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
a340: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
a350: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
a360: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
a370: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
a380: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
a390: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
a3a0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
a3b0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
a3c0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
a3d0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
a3e0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
a3f0: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
a400: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a410: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
a420: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
a430: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
a440: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
a450: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
a460: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
a470: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
a480: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
a490: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
a4a0: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
a4b0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
a4c0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
a4d0: 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54  ndex, value.GetT
a4e0: 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d  ype(), value));.
a4f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
a500: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
a510: 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69  ing FormatDateTi
a520: 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75  me(DateTime valu
a530: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
a540: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
a550: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
a560: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
a570: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
a580: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f  .Append(value.To
a590: 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d  String("yyyy-MM-
a5a0: 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  ddTHH:mm:ss.FFFF
a5b0: 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20  FFFK"));..      
a5c0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
a5d0: 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ' ');..        r
a5e0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
a5f0: 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  ue.Kind);..     
a600: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
a610: 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (' ');..        
a620: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
a630: 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20  lue.Ticks);.... 
a640: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
a650: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
a660: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
a670: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
a680: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
a690: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
a6a0: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
a6b0: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76  ndex, DateTime v
a6c0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
a6d0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
a6e0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
a6f0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
a700: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
a710: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
a720: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
a730: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
a740: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
a750: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
a760: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
a770: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
a780: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
a790: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
a7a0: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72  f(DateTime), For
a7b0: 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75  matDateTime(valu
a7c0: 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  e)));..    }....
a7d0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
a7e0: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
a7f0: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
a800: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
a810: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
a820: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
a830: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
a840: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
a850: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
a860: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
a870: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
a880: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
a890: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
a8a0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
a8b0: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
a8c0: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
a8d0: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
a8e0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
a8f0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
a900: 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76  peof(String), (v
a910: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
a920: 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22  value : "<null>"
a930: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
a940: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a950: 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65   string ToHexade
a960: 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20  cimalString(..  
a970: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72        byte[] arr
a980: 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ay..        ).. 
a990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
a9a0: 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29   (array == null)
a9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a9c0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
a9d0: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
a9e0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
a9f0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61   StringBuilder(a
aa00: 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29  rray.Length * 2)
aa10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
aa20: 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e   length = array.
aa30: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
aa40: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
aa50: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
aa60: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
aa70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
aa80: 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79  ult.Append(array
aa90: 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67  [index].ToString
aaa0: 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  ("x2"));....    
aab0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
aac0: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
aad0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
aae0: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
aaf0: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
ab00: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
ab10: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
ab20: 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  x, byte[] value)
ab30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ab40: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
ab50: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
ab60: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ab70: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
ab80: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
ab90: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
aba0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
abb0: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
abc0: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
abd0: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
abe0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
abf0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
ac00: 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74  ndex, typeof(Byt
ac10: 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20  e[]), (value != 
ac20: 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65  null) ? ToHexade
ac30: 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75  cimalString(valu
ac40: 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  e) : "<null>"));
ac50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ac60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ac70: 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c   void Bind_Doubl
ac80: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
ac90: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
aca0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
acb0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
acc0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
acd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
ace0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
acf0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
ad00: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
ad10: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
ad20: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
ad30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
ad40: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
ad50: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ad60: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
ad70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad80: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
ad90: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
ada0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69  .        }....#i
adb0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
adc0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
add0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ade0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
adf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ae00: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
ae10: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  e(handle, index,
ae20: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
ae30: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ae40: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ae50: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
ae60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ae70: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
ae80: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
ae90: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
aea0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
aeb0: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
aec0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
aed0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
aee0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
aef0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
af00: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
af10: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
af20: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
af30: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
af40: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
af50: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
af60: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
af70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
af80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
af90: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
afa0: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
afb0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
afc0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
afd0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
afe0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
aff0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
b000: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
b010: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b020: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
b030: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b040: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
b050: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b060: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
b070: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
b080: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
b090: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
b0a0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
b0b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b0c0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
b0d0: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
b0e0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
b0f0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
b100: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
b110: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
b120: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
b130: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
b140: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b150: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b160: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28  oid Bind_UInt32(
b170: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b180: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
b190: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
b1a0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69  s, int index, ui
b1b0: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
b1c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b1d0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
b1e0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
b1f0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
b200: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
b210: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
b220: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
b230: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
b240: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
b250: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
b260: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
b270: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
b280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
b290: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
b2a0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
b2b0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
b2c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b2d0: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
b2e0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
b2f0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
b300: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
b310: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d  Int32AsInt64) ==
b320: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b330: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
b340: 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20  2AsInt64)..     
b350: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b360: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20    long value2 = 
b370: 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50  value;....#if !P
b380: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
b390: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
b3a0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
b3b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b3c0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
b3d0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
b3e0: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20  value2);..#elif 
b3f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
b410: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b420: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
b430: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
b440: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
b450: 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ref value2);..#e
b460: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
b470: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
b480: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
b490: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
b4a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b4b0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
b4c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
b4d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b4e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
b4f0: 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c  ind_uint(handle,
b500: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
b510: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
b520: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
b530: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
b540: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
b550: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
b560: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
b570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b590: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53  oid Bind_Int64(S
b5a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b5b0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
b5c0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
b5d0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e  , int index, lon
b5e0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
b5f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
b600: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
b610: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
b620: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
b630: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
b640: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b650: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
b660: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
b670: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
b680: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
b690: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
b6a0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
b6c0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
b6d0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
b6e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b6f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b700: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b710: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b720: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
b730: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
b740: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
b750: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b760: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
b770: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
b780: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b790: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
b7a0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
b7b0: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
b7c0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
b7d0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
b7e0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
b7f0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
b800: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
b810: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b820: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
b830: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
b840: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
b850: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b860: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b870: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
b880: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
b890: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
b8a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
b8b0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
b8c0: 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  , ulong value)..
b8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
b8e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
b8f0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
b900: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
b910: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
b920: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
b930: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
b940: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
b950: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
b960: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
b970: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
b980: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
b990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b9a0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
b9b0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
b9c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
b9d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
b9e0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
b9f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ba00: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
ba10: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
ba20: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
ba30: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ba40: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
ba50: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ba60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ba70: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ba80: 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  uint64_interop(h
ba90: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
baa0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
bab0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
bac0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
bad0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
bae0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
baf0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
bb00: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
bb10: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
bb20: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
bb30: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
bb40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
bb50: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
bb60: 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65  Bind_Text(SQLite
bb70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
bb80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
bb90: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
bba0: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
bbb0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
bbc0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
bbd0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
bbe0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
bbf0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
bc00: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
bc10: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
bc20: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
bc30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
bc40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
bc50: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
bc60: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
bc70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
bc80: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
bc90: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
bca0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
bcb0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
bcc0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
bcd0: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
bce0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
bcf0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
bd00: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
bd10: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
bd20: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
bd30: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
bd40: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
bd50: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
bd60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bd70: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
bd80: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
bd90: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
bda0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
bdb0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
bdc0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bdd0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
bde0: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
bdf0: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
be00: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
be10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
be20: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
be30: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
be40: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
be50: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
be60: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
be70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
be80: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
be90: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
bea0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
beb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
bec0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
bed0: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
bee0: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
bef0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
bf00: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
bf10: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
bf20: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
bf30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
bf40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
bf50: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
bf60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bf70: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
bf80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
bf90: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
bfa0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
bfb0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
bfc0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64  handle, index, d
bfd0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
bfe0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
bff0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
c000: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c010: 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d  lags.BindDateTim
c020: 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53 51  eWithKind) == SQ
c030: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
c040: 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65  ags.BindDateTime
c050: 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20 20  WithKind)..     
c060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c070: 20 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d 65    if ((_datetime
c080: 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65  Kind != DateTime
c090: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
c0a0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
c0b0: 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21        (dt.Kind !
c0c0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
c0d0: 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a  nspecified) &&..
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0f0: 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61 74  (dt.Kind != _dat
c100: 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20 20  etimeKind))..   
c110: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c120: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c130: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d  _datetimeKind ==
c140: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74   DateTimeKind.Ut
c150: 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c)..            
c160: 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e          dt = dt.
c170: 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 28  ToUniversalTime(
c180: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c190: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
c1a0: 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61  tetimeKind == Da
c1b0: 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c  teTimeKind.Local
c1c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c1d0: 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54         dt = dt.T
c1e0: 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a 20  oLocalTime();.. 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c200: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c210: 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65     switch (_date
c220: 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20  timeFormat)..   
c230: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c240: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
c250: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
c260: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
c270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c280: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
c290: 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b  alue = dt.Ticks;
c2a0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
c2b0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
c2c0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
c2d0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
c2e0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
c2f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
c300: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
c310: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
c320: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
c330: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
c360: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
c370: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
c380: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c3b0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
c3c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c3d0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
c3e0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
c3f0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
c400: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c420: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c430: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
c440: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c450: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
c460: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
c470: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
c480: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
c490: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
c4a0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
c4b0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
c4c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c4e0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c4f0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c500: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c510: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c520: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
c540: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
c550: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c560: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
c570: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
c580: 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20  anDay:..        
c590: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
c5b0: 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f  ouble value = To
c5c0: 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a  JulianDay(dt);..
c5d0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
c5e0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
c5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c600: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
c610: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
c620: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c630: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
c640: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
c650: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
c660: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c680: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
c690: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
c6a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c6b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c6e0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c6f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c700: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
c710: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
c720: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
c730: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c750: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c760: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c770: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c780: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
c790: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
c7a0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
c7b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
c7d0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
c7e0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
c7f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c810: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c820: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c830: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c840: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c850: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
c870: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
c880: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c890: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
c8a0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
c8b0: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
c8c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
c8e0: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
c8f0: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
c900: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
c910: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
c920: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
c930: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c940: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
c950: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
c960: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
c970: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
c980: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
c990: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c9a0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
c9e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
c9f0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ca00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
ca30: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
ca40: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ca50: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
ca60: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
ca70: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
ca80: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caa0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
cab0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
cac0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cad0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
cae0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
caf0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
cb00: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
cb20: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
cb30: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
cb40: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cb60: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
cb70: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
cb80: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
cb90: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
cba0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
cbc0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
cbd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cbe0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cc10: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
cc20: 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d  = ToUTF8(dt);...
cc30: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
cc40: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
cc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc60: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
cc70: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
cc80: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
cc90: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
cca0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
ccb0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
ccc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
ccf0: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd10: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd30: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
cd40: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
cd50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cd60: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
cd70: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
cd80: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
cd90: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
cdc0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
cdd0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
cde0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
cdf0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
ce20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ce30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
ce40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ce50: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
ce60: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
ce70: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
ce80: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ce90: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
cea0: 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44  ex, byte[] blobD
ceb0: 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ata)..    {..   
cec0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
ced0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
cee0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
cef0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
cf00: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
cf10: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
cf20: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
cf30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cf40: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
cf50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
cf60: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
cf70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cf80: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
cf90: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
cfa0: 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  lobData);..     
cfb0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
cfc0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
cfd0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
cfe0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
cff0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
d000: 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  b(handle, index,
d010: 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44   blobData, blobD
d020: 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74  ata.Length, (Int
d030: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
d040: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
d050: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d060: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d070: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d080: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d090: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d0a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d0b0: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
d0c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
d0d0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
d0e0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
d0f0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
d100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
d110: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
d120: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
d130: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
d140: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d150: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d160: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
d170: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
d180: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d190: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
d1a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d1b0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
d1c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
d1d0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
d1e0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
d1f0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
d200: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d210: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d220: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d230: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68  ite3_bind_null(h
d240: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
d250: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d260: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d270: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d280: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d290: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d2a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d2b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d2c0: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
d2d0: 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  mCount(SQLiteSta
d2e0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
d2f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d300: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
d310: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d320: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d330: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
d340: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
d350: 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d       int value =
d360: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d370: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d380: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
d390: 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  t(handle);....  
d3a0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d3b0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d3c0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d3d0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d3e0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d3f0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
d400: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
d410: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
d420: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
d430: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
d440: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
d450: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
d470: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
d480: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
d490: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
d4a0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
d4b0: 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e  er count is {1}.
d4c0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
d4d0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
d4e0: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
d4f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d500: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
d510: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d520: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
d530: 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d  tring Bind_Param
d540: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
d550: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
d560: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d570: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
d580: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
d590: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
d5a0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
d5b0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
d5c0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  tmt;..        st
d5d0: 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69  ring name;....#i
d5e0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
d5f0: 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  RD..        int 
d600: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
d610: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
d620: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
d630: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d640: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
d650: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61  _name_interop(ha
d660: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
d670: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
d680: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d  lse..        nam
d690: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
d6a0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
d6b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d6c0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
d6d0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c  (handle, index),
d6e0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   -1);..#endif...
d6f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
d700: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
d710: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d720: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
d730: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d740: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
d750: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
d760: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
d770: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
d780: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
d790: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
d7a0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
d7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d7c0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
d7d0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
d7f0: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
d800: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
d810: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
d830: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
d840: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
d850: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d860: 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a    return name;..
d870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d880: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
d890: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
d8a0: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
d8b0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
d8c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
d8d0: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
d8e0: 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  amName)..    {..
d8f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
d900: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d910: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
d920: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
d930: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55     int index = U
d940: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d950: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
d960: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
d970: 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70  handle, ToUTF8(p
d980: 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  aramName));.... 
d990: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
d9a0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
d9b0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d9c0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
d9d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d9e0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
d9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
da00: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
da10: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
da20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
da30: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
da40: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
da60: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
da70: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
da80: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
da90: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
daa0: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
dab0: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
dac0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
dad0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
dae0: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
daf0: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
db00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
db10: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
db20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
db30: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
db40: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
db50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
db60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
db70: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
db80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
db90: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
dba0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
dbb0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
dbc0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
dbd0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
dbe0: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
dbf0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
dc00: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
dc10: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
dc20: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
dc30: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49  en = 0;..      I
dc40: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
dc50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dc60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
dc70: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
dc80: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
dc90: 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
dca0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50  else..      IntP
dcb0: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
dcc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dcd0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
dce0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
dcf0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
dd00: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d  f..      if (p =
dd10: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
dd20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
dd30: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
dd40: 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n(SQLiteErrorCod
dd50: 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74  e.NoMem, GetLast
dd60: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21  Error());..#if !
dd70: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
dd80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
dd90: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
dda0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
ddb0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
ddc0: 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23  tring(p, -1);..#
ddd0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
dde0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ddf0: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
de00: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
de10: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
de20: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
de30: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
de40: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
de50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
de60: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
de70: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
de80: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
de90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
dea0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
deb0: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
dec0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
ded0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65  t, int index, re
dee0: 66 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  f TypeAffinity n
def0: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b  Affinity)..    {
df00: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
df10: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
df20: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 65  ANDARD..      le
df30: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  n = 0;..      In
df40: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
df50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
df60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
df70: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
df80: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
df90: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
dfa0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c  ..#else..      l
dfb0: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
dfc0: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
dfd0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dfe0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
dff0: 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
e000: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
e010: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
e020: 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
e030: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
e040: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
e050: 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50     if (p != IntP
e060: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
e070: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
e080: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  len);..      els
e090: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
e0a0: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20      string[] ar 
e0b0: 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e  = stmt.TypeDefin
e0c0: 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  itions;..       
e0d0: 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
e0e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e0f0: 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
e100: 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
e110: 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
e120: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e130: 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d  return ar[index]
e140: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
e150: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
e160: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
e170: 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28        //switch (
e180: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
e190: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
e1a0: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
e1b0: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
e1c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
e1d0: 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20  urn "BIGINT";.. 
e1e0: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
e1f0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
e200: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble:..        //
e210: 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42      return "DOUB
e220: 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  LE";..        //
e230: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
e240: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
e250: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
e260: 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20  "BLOB";..       
e270: 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20   //  default:.. 
e280: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
e290: 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20  urn "TEXT";..   
e2a0: 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20       //}..      
e2b0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
e2c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e2d0: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  e int ColumnInde
e2e0: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
e2f0: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
e300: 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20  olumnName)..    
e310: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d  {..      int x =
e320: 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d   ColumnCount(stm
e330: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t);....      for
e340: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
e350: 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
e360: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
e370: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f  tring.Compare(co
e380: 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e  lumnName, Column
e390: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53  Name(stmt, n), S
e3a0: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
e3b0: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
e3c0: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
e3d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
e3e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
e3f0: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d  turn -1;..    }.
e400: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e410: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
e420: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
e430: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
e440: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
e450: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
e460: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
e470: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
e480: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
e490: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
e4a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e4b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
e4c0: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
e4d0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
e4e0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
e4f0: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
e500: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
e510: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
e520: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
e530: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e540: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
e550: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
e560: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
e570: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
e580: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e590: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
e5a0: 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
e5b0: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
e5c0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
e5d0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
e5e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
e5f0: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
e600: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
e610: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
e620: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
e630: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
e640: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
e650: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
e660: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
e670: 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
e680: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
e690: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
e6a0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
e6b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e6c0: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
e6d0: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
e6e0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
e6f0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
e700: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e710: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
e720: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
e730: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
e740: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
e750: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
e760: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
e770: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
e780: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
e790: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
e7a0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
e7b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e7c0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
e7d0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
e7e0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
e7f0: 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
e800: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e810: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
e820: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
e830: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e840: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
e850: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
e860: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
e870: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
e880: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
e890: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e8a0: 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
e8b0: 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
e8c0: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
e8d0: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66  ring column, ref
e8e0: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
e8f0: 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
e900: 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
e910: 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  f bool notNull, 
e920: 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  ref bool primary
e930: 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75  Key, ref bool au
e940: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
e950: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
e960: 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d 20  r dataTypePtr = 
e970: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
e980: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
e990: 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  eqPtr = IntPtr.Z
e9a0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
e9b0: 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20  nnotNull = 0;.. 
e9c0: 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
e9d0: 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20  yKey = 0;..     
e9e0: 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20   int nautoInc = 
e9f0: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
ea00: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
ea10: 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
ea20: 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
ea30: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
ea40: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ea50: 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  dtLen = 0;..    
ea60: 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    csLen = 0;..  
ea70: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
ea80: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ea90: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
eaa0: 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
eab0: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
eac0: 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
ead0: 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
eae0: 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
eaf0: 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
eb00: 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
eb10: 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
eb20: 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
eb30: 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e  toInc, ref dtLen
eb40: 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23  , ref csLen);..#
eb50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
eb60: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
eb70: 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
eb80: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
eb90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
eba0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
ebb0: 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
ebc0: 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
ebd0: 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
ebe0: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
ebf0: 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
ec00: 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
ec10: 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
ec20: 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
ec30: 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   ref nautoInc);.
ec40: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
ec50: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ec60: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ec70: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ec80: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ec90: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
eca0: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
ecb0: 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
ecc0: 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
ecd0: 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
ece0: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
ecf0: 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
ed00: 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
ed10: 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
ed20: 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
ed30: 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
ed40: 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
ed50: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
ed60: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
ed70: 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
ed80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ed90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
eda0: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53  uble GetDouble(S
edb0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
edc0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
edd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
ede0: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
edf0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
ee00: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
ee10: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
ee20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ee30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
ee40: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
ee50: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
ee60: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
ee70: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76  TANDARD..      v
ee80: 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20  alue = 0.0;..   
ee90: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
eea0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
eeb0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
eec0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
eed0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
eee0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
eef0: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
ef00: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
ef10: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
ef20: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
ef30: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
ef40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ef50: 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65  l override sbyte
ef60: 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65   GetSByte(SQLite
ef70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ef80: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
ef90: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
efa0: 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65  unchecked((sbyte
efb0: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
efc0: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
efd0: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
efe0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
eff0: 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  l override byte 
f000: 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74  GetByte(SQLiteSt
f010: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
f020: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
f030: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
f040: 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47  checked((byte)(G
f050: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
f060: 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56  dex) & byte.MaxV
f070: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
f080: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f090: 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65  verride short Ge
f0a0: 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  tInt16(SQLiteSta
f0b0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
f0c0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
f0d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
f0e0: 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47  hecked((short)(G
f0f0: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
f100: 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
f110: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
f120: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
f130: 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74   override ushort
f140: 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74   GetUInt16(SQLit
f150: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
f160: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
f170: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
f180: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f   unchecked((usho
f190: 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  rt)(GetInt32(stm
f1a0: 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f  t, index) & usho
f1b0: 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  rt.MaxValue));..
f1c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f1d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
f1e0: 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  nt GetInt32(SQLi
f1f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f200: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
f210: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
f220: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
f230: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
f240: 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73  lumn_int(stmt._s
f250: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
f260: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
f270: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f280: 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74  ide uint GetUInt
f290: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
f2a0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
f2b0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f2c0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
f2d0: 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33  ed((uint)GetInt3
f2e0: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  2(stmt, index));
f2f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f300: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f310: 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53   long GetInt64(S
f320: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f330: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
f340: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
f350: 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  ng value;..#if !
f360: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
f370: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
f380: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
f390: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f3a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
f3b0: 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
f3c0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
f3d0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
f3e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75  DARD..      valu
f3f0: 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e  e = 0;..      Un
f400: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f410: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f420: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73  _int64_interop(s
f430: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f440: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
f450: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
f460: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
f470: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
f480: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
f490: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
f4a0: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
f4b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f4c0: 72 69 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49  ride ulong GetUI
f4d0: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
f4e0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
f4f0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
f500: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
f510: 63 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49  cked((ulong)GetI
f520: 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
f530: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
f540: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f550: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65  ide string GetTe
f560: 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  xt(SQLiteStateme
f570: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
f580: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
f590: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
f5a0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
f5b0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
f5c0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
f5d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f5e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
f5f0: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
f600: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f610: 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
f620: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
f630: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
f640: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
f650: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f660: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
f670: 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
f680: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a  _stmt, index),..
f690: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
f6a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f6b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
f6c0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
f6d0: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65  mt, index));..#e
f6e0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
f6f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f700: 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65  ride DateTime Ge
f710: 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  tDateTime(SQLite
f720: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f730: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
f740: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61  {..      if (_da
f750: 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
f760: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
f770: 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20 20 20  s.Ticks)..      
f780: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
f790: 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ime(GetInt64(stm
f7a0: 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
f7b0: 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  timeKind);..    
f7c0: 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65    else if (_date
f7d0: 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51  timeFormat == SQ
f7e0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
f7f0: 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20  JulianDay)..    
f800: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
f810: 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28  eTime(GetDouble(
f820: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
f830: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
f840: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
f850: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
f860: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
f870: 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20  ts.UnixEpoch).. 
f880: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
f890: 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 33  DateTime(GetInt3
f8a0: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  2(stmt, index), 
f8b0: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
f8c0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
f8d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
f8e0: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
f8f0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
f900: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
f910: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f920: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
f930: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
f940: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
f950: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
f960: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
f970: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
f980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f990: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
f9a0: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
f9b0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
f9c0: 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
f9d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f9e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
f9f0: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
fa00: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
fa10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
fa20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fa30: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
fa40: 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
fa50: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
fa60: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
fa70: 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
fa80: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
fa90: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
faa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
fab0: 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
fac0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fad0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
fae0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
faf0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
fb00: 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
fb10: 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
fb20: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
fb30: 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
fb40: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
fb50: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
fb60: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
fb70: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
fb80: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
fb90: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
fba0: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
fbb0: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
fbc0: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
fbd0: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
fbe0: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
fbf0: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
fc00: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
fc10: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
fc20: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
fc30: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
fc40: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
fc50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fc60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
fc70: 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71  mn_blob(stmt._sq
fc80: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
fc90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
fca0: 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
fcb0: 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
fcc0: 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
fcd0: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
fce0: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
fcf0: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
fd00: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
fd10: 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
fd20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
fd30: 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
fd40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
fd50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fd60: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
fd70: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fd80: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
fd90: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
fda0: 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
fdb0: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
fdc0: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
fdd0: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
fde0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
fdf0: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
fe00: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
fe10: 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
fe20: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
fe30: 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
fe40: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
fe50: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
fe60: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
fe70: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
fe80: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
fe90: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
fea0: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
feb0: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
fec0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
fed0: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
fee0: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
fef0: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
ff00: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
ff10: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
ff20: 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
ff30: 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
ff40: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
ff50: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
ff60: 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
ff70: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
ff80: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
ff90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ffa0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
ffb0: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
ffc0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
ffd0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
ffe0: 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
fff0: 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
10000 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
10010 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
10020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10030 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
10040 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
10050 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
10060 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10070 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
10080 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10090 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
100a0 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
100b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
100c0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
100d0 64 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  d CreateFunction
100e0 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74  (string strFunct
100f0 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20  ion, int nArgs, 
10100 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  bool needCollSeq
10110 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
10120 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c   func, SQLiteCal
10130 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20  lback funcstep, 
10140 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
10150 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a  ack funcfinal)..
10160 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
10170 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
10180 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
10190 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
101a0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
101b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
101c0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
101d0 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
101e0 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
101f0 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
10200 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
10210 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
10220 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
10230 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
10240 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  0);..      if (n
10250 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
10260 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
10270 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10280 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
10290 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
102a0 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
102b0 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
102c0 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
102d0 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
102e0 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
102f0 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
10300 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65  e) ? 1 : 0);..#e
10310 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
10320 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10330 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
10340 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
10350 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
10360 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
10370 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
10380 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
10390 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20  cfinal);..      
103a0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
103b0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
103c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
103d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
103e0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
103f0 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
10400 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
10410 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
10420 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
10430 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64  uncfinal);..#end
10440 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
10450 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10460 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
10470 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10480 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
10490 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
104a0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
104b0 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
104c0 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
104d0 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
104e0 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
104f0 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
10500 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20  tion func16)..  
10510 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
10520 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
10530 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10540 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
10550 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
10560 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
10570 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74  ation), 2, IntPt
10580 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b  r.Zero, func16);
10590 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
105a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
105b0 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
105c0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
105d0 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
105e0 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
105f0 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
10600 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
10610 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20  , func);..      
10620 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
10630 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
10640 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
10650 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
10660 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
10670 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10680 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
10690 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
106a0 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
106b0 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
106c0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
106d0 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e  string s1, strin
106e0 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  g s2)..    {..#i
106f0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10700 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
10710 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
10720 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
10730 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
10740 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
10750 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
10760 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
10770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
10780 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
10790 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
107a0 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
107b0 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
107c0 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
107d0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
107e0 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
107f0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
10800 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
10810 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
10820 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
10830 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
10840 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
10850 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
10860 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
10870 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
10880 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
10890 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
108a0 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
108b0 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
108c0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
108d0 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
108e0 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
108f0 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29  ter.GetBytes(s1)
10900 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
10910 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
10920 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (s2);....      r
10930 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10940 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10950 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
10960 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
10970 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
10980 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
10990 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
109a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
109b0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
109c0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
109d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
109e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
109f0 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
10a00 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
10a10 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
10a20 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
10a30 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
10a40 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
10a50 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
10a60 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10a70 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
10a80 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
10a90 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
10aa0 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
10ab0 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
10ac0 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
10ad0 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
10ae0 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
10af0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
10b00 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
10b10 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
10b20 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
10b30 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
10b40 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
10b50 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
10b60 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
10b70 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
10b80 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
10b90 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
10ba0 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
10bb0 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
10bc0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
10bd0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
10be0 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
10bf0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
10c00 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
10c10 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
10c20 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
10c30 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
10c40 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
10c50 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
10c60 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
10c70 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
10c80 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
10c90 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
10ca0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10cb0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
10cc0 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
10cd0 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
10ce0 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
10cf0 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
10d00 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
10d10 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
10d20 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
10d30 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
10d40 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10d50 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e  erride Collation
10d60 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c  Sequence GetColl
10d70 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51  ationSequence(SQ
10d80 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
10d90 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
10da0 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  t)..    {..#if !
10db0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10dc0 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e  .      Collation
10dd0 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e  Sequence seq = n
10de0 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ew CollationSequ
10df0 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69  ence();..      i
10e00 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
10e10 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b     int type = 0;
10e20 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20  ..      int enc 
10e30 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  = 0;..      IntP
10e40 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
10e50 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10e60 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73  e3_context_colls
10e70 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  eq_interop(conte
10e80 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65  xt, ref type, re
10e90 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b  f enc, ref len);
10ea0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
10eb0 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d  != null) seq.Nam
10ec0 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
10ed0 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
10ee0 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c   seq.Type = (Col
10ef0 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74  lationTypeEnum)t
10f00 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  ype;..      seq.
10f10 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20  _func = func;.. 
10f20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e       seq.Encodin
10f30 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  g = (CollationEn
10f40 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d  codingEnum)enc;.
10f50 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
10f60 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  seq;..#else..   
10f70 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
10f80 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
10f90 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
10fa0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10fb0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10fc0 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
10fd0 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70  ueBytes(IntPtr p
10fe0 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
10ff0 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
11000 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
11010 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
11020 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
11030 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
11040 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
11050 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a  alue_bytes(p);..
11060 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
11070 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
11080 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
11090 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
110a0 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
110b0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
110c0 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
110d0 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
110e0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
110f0 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
11100 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
11110 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
11120 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
11130 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
11140 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
11150 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
11160 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
11170 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
11180 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
11190 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
111a0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
111b0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
111c0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
111d0 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d  alue_blob(p);...
111e0 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
111f0 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
11200 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
11210 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
11220 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
11230 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
11240 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
11250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
11260 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
11270 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
11280 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
11290 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
112a0 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
112b0 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
112c0 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
112d0 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
112e0 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a   double value;..
112f0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
11300 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
11310 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
11320 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11330 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
11340 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65  double(ptr);..#e
11350 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
11360 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75  DARD..      valu
11370 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
11380 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11390 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
113a0 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  e_double_interop
113b0 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29  (ptr, ref value)
113c0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
113d0 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
113e0 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
113f0 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
11400 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
11410 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11420 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11430 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61  e int GetParamVa
11440 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20  lueInt32(IntPtr 
11450 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
11460 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
11470 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11480 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
11490 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ptr);..    }....
114a0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
114b0 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61  rride long GetPa
114c0 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e  ramValueInt64(In
114d0 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
114e0 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61  ..      Int64 va
114f0 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
11500 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
11510 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
11520 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
11530 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11540 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29  value_int64(ptr)
11550 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
11560 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
11570 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
11580 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11590 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
115a0 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
115b0 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75  op(ptr, ref valu
115c0 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
115d0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
115e0 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
115f0 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
11600 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
11610 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
11620 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11630 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61  ide string GetPa
11640 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
11650 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
11660 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
11670 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
11680 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
11690 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
116a0 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
116b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
116c0 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
116d0 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c 65 6e  rop(ptr, ref len
116e0 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
116f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
11700 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
11710 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11720 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
11730 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
11740 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11750 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
11760 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
11770 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
11780 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11790 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
117a0 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
117b0 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
117c0 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
117d0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
117e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
117f0 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
11800 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
11810 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11820 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
11830 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
11840 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
11850 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
11860 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11870 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
11880 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
11890 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
118a0 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
118b0 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
118c0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
118d0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
118e0 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
118f0 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
11900 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
11910 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
11920 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
11930 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
11940 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11950 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
11960 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
11970 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
11980 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
11990 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
119a0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
119b0 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
119c0 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
119d0 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
119e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
119f0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
11a00 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
11a10 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11a20 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11a30 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
11a40 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
11a50 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
11a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
11a70 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11a80 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
11a90 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
11aa0 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
11ab0 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
11ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11ad0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
11ae0 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
11af0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
11b00 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
11b10 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
11b20 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11b30 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
11b40 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
11b50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11b60 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
11b70 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
11b80 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
11b90 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
11ba0 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
11bb0 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
11bc0 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
11bd0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11be0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
11bf0 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
11c00 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
11c10 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
11c20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11c30 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
11c40 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
11c50 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
11c60 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
11c70 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
11c80 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
11c90 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
11ca0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
11cb0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11cc0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
11cd0 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
11ce0 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
11cf0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11d00 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
11d10 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
11d20 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
11d30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11d40 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
11d50 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
11d60 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
11d70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11d80 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
11d90 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
11da0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11db0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
11dc0 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
11dd0 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
11de0 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
11df0 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
11e00 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
11e10 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
11e20 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
11e30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
11e40 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
11e50 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
11e60 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
11e70 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
11e80 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
11e90 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
11ea0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
11eb0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
11ec0 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
11ed0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11ee0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
11ef0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
11f00 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
11f10 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
11f20 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
11f30 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
11f40 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
11f50 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
11f60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11f70 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
11f80 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
11f90 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
11fa0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
11fb0 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
11fc0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
11fd0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
11fe0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
11ff0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
12000 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69  reateModule(SQLi
12010 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
12020 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
12030 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
12040 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
12050 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
12060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12070 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
12080 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
12090 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
120a0 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
120b0 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
120c0 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
120d0 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ule) != SQLiteCo
120e0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
120f0 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20  LogModule)..    
12100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12110 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72     module.LogErr
12120 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ors = ((flags & 
12130 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
12140 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
12150 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43  rror) == SQLiteC
12160 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
12170 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d  ogModuleError);.
12180 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
12190 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
121a0 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
121b0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
121c0 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
121d0 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74  eption) == SQLit
121e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
121f0 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
12200 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
12210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
12220 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
12230 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
12240 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
12250 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
12260 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
12270 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  handle");....   
12280 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
12290 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
122a0 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73        LoadExtens
122b0 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ion(UnsafeNative
122c0 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44  Methods.SQLITE_D
122d0 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73  LL, "sqlite3_vts
122e0 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20  him_init");.... 
122f0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
12300 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  e.CreateDisposab
12310 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d  leModule(_sql)).
12320 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12330 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
12340 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
12360 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69  modules = new Di
12370 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
12380 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29   SQLiteModule>()
12390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
123a0 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f   _modules.Add(mo
123b0 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c  dule.Name, modul
123c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
123d0 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
123e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
123f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12400 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
12410 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
12420 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
12430 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12450 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
12460 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 72  tring.Format("Cr
12470 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c  eateModule (Pool
12480 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22  ) Disabled: {0}"
12490 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69  , _sql));..#endi
124a0 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  f..            }
124b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
124c0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
124d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
124e0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
124f0 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c  teException(GetL
12500 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
12510 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
12520 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
12530 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
12540 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
12550 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
12560 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c  y in order to cl
12570 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72  eanup the resour
12580 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  ces..    /// ass
12590 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 6d  ociated with a m
125a0 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
125b0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
125c0 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
125d0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f   table...    ///
125e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
125f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12600 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
12610 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f  /// The module o
12620 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79  bject previously
12630 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c   passed to the <
12640 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74 65  see cref="Create
12650 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20  Module" />..    
12660 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  /// method...   
12670 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12680 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12690 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
126a0 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66   /// The flags f
126b0 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
126c0 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
126d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
126e0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
126f0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
12700 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
12710 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12720 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53   DisposeModule(S
12730 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
12740 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  le, SQLiteConnec
12750 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
12760 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
12770 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
12780 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12790 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
127a0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
127b0 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
127c0 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
127d0 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d  ispose();..    }
127e0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
127f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12800 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61  e IntPtr Aggrega
12810 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72  teContext(IntPtr
12820 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
12830 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
12840 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12850 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
12860 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
12870 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d  text, 1);..    }
12880 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
12890 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
128a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
128b0 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
128c0 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
128d0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
128e0 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
128f0 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
12900 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72  le..    /// in r
12910 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c  esponse to a cal
12920 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20  l into the <see 
12930 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
12940 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
12950 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f  e" />..    /// o
12960 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  r <see cref="ISQ
12970 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
12980 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69  .xConnect" /> vi
12990 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68  rtual table meth
129a0 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ods...    /// </
129b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
129c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
129d0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
129e0 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
129f0 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69  le module that i
12a00 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69  s to be responsi
12a10 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ble for the virt
12a20 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
12a30 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  // being declare
12a40 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
12a50 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
12a60 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71  aram name="strSq
12a70 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  l">..    /// The
12a80 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
12a90 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
12aa0 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20  ment describing 
12ab0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12ac0 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  e to..    /// be
12ad0 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
12ae0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
12af0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12b00 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
12b10 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
12b20 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
12b30 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
12b40 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
12b50 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
12b60 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
12b70 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
12b80 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
12b90 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
12ba0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
12bb0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
12bc0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
12bd0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
12be0 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
12bf0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12c00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12c10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12c20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61  DeclareVirtualTa
12c30 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ble(..        SQ
12c40 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
12c50 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
12c60 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20  ng strSql,..    
12c70 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
12c80 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
12c90 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12ca0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
12cb0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
12cc0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
12cd0 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
12ce0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
12cf0 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
12d00 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
12d10 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
12d20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12d30 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 53         IntPtr pS
12d40 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ql = IntPtr.Zero
12d50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
12d60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12d70 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20           pSql = 
12d80 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
12d90 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
12da0 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20  g(strSql);....  
12db0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
12dc0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
12dd0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12de0 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  s.sqlite3_declar
12df0 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20  e_vtab(..       
12e00 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
12e10 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
12e20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
12e30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
12e40 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d  k) && (module !=
12e50 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
12e60 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
12e70 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b  Declared = true;
12e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12e90 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
12ea0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
12eb0 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
12ec0 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
12ed0 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
12ee0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12ef0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
12f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12f10 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e    if (pSql != In
12f20 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
12f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12f40 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
12f50 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71  eMemory.Free(pSq
12f60 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
12f70 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50       pSql = IntP
12f80 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
12f90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12fa0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
12fb0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12fc0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
12fd0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
12fe0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
12ff0 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
13000 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
13010 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
13020 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  on in response t
13030 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
13040 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
13050 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
13060 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
13070 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
13080 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
13090 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
130a0 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
130b0 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
130c0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
130d0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
130e0 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
130f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
13100 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
13110 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
13120 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
13130 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
13140 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
13150 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
13160 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
13170 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
13180 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
13190 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20  entCount">..    
131a0 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
131b0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
131c0 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
131d0 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
131e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
131f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13200 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
13210 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
13220 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
13230 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
13240 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13250 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13260 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
13270 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
13280 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
13290 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
132a0 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
132b0 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
132c0 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
132d0 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
132e0 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
132f0 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
13300 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
13310 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
13320 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
13330 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
13340 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
13350 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
13360 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13370 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
13380 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
13390 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
133a0 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
133b0 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
133c0 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75   int argumentCou
133d0 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nt,..        str
133e0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
133f0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
13400 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ror..        )..
13410 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
13420 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
13430 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
13440 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13450 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
13460 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
13470 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
13480 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
13490 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
134a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
134b0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61        IntPtr pNa
134c0 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
134d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
134e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
134f0 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
13500 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
13510 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
13520 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ng(name);....   
13530 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
13540 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
13550 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13560 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61  .sqlite3_overloa
13570 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  d_function(..   
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
13590 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65  l, pName, argume
135a0 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ntCount);....   
135b0 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
135c0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
135d0 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65  e.Ok) error = Ge
135e0 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d  tLastError();...
135f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
13600 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20  urn n;..        
13610 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
13620 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
13630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
13640 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
13650 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
13660 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13670 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
13680 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a  y.Free(pName);..
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
136b0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
136c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
136d0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
136e0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
136f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
13700 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
13710 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
13720 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20  g by SQLite...  
13730 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
13740 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13750 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
13760 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
13770 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
13780 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
13790 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
137a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
137b0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
137c0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
137d0 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
137e0 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
137f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
13800 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
13810 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13820 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61  hods.sqlite3_ena
13830 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
13840 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
13850 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
13860 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
13870 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
13880 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
13890 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
138a0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
138b0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
138c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
138d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
138e0 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51    /// Loads a SQ
138f0 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c  Lite extension l
13900 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20  ibrary from the 
13910 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20  named file...   
13920 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
13930 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13940 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
13950 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
13960 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69  me of the dynami
13970 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66  c link library f
13980 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
13990 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
139a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
139b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
139c0 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e  name="procName">
139d0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
139e0 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74  me of the export
139f0 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64  ed function used
13a00 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
13a10 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
13a20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20     /// If null, 
13a30 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c  the default "sql
13a40 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
13a50 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65  nit" will be use
13a60 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
13a70 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
13a80 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
13a90 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73   LoadExtension(s
13aa0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20  tring fileName, 
13ab0 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29  string procName)
13ac0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13ad0 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
13ae0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13af0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
13b00 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
13b10 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b  ion("fileName");
13b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
13b30 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  tr pError = IntP
13b40 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
13b50 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
13b60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13b70 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e  byte[] utf8FileN
13b80 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
13b90 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
13ba0 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27  (fileName + '\0'
13bb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13bc0 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e  byte[] utf8ProcN
13bd0 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
13be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
13bf0 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  rocName != null)
13c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c10 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d    utf8ProcName =
13c20 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
13c30 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63  F8.GetBytes(proc
13c40 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d  Name + '\0');...
13c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
13c60 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
13c70 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13c80 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61  hods.sqlite3_loa
13c90 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
13cb0 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65  ql, utf8FileName
13cc0 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20  , utf8ProcName, 
13cd0 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a  ref pError);....
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13cf0 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
13d00 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
13d10 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13d20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
13d30 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72  ion(n, UTF8ToStr
13d40 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29  ing(pError, -1))
13d50 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
13d60 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
13d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13d80 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72        if (pError
13d90 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
13da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13dc0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13dd0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65  hods.sqlite3_fre
13de0 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
13df0 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
13e00 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
13e10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
13e20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
13e30 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e   }....    /// En
13e40 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
13e50 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  d extended resul
13e60 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
13e70 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
13e80 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13e90 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  e void SetExtend
13ea0 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
13eb0 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
13ec0 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
13ed0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
13ee0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13ef0 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
13f00 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d  d_result_codes(.
13f10 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c  .          _sql,
13f20 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
13f30 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  0));....      if
13f40 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
13f50 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
13f60 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
13f70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
13f80 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
13f90 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
13fa0 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72  e last SQLite er
13fb0 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
13fc0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13fd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
13fe0 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
13ff0 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
14000 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
14010 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
14020 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
14030 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
14040 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
14050 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  e extended error
14060 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
14070 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
14080 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74  iteErrorCode Ext
14090 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28  endedResultCode(
140a0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
140b0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
140c0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
140d0 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
140e0 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
140f0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
14100 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
14110 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
14120 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
14130 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
14140 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
14150 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69   LogMessage(SQLi
14160 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72  teErrorCode iErr
14170 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65  Code, string zMe
14180 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssage)..    {.. 
14190 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67 4d 65       StaticLogMe
141a0 73 73 61 67 65 28 69 45 72 72 43 6f 64 65 2c 20  ssage(iErrCode, 
141b0 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  zMessage);..    
141c0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
141d0 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
141e0 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
141f0 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
14200 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
14210 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 53  al static void S
14220 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28  taticLogMessage(
14230 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14240 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
14250 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
14260 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
14270 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14280 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64  ite3_log(iErrCod
14290 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61  e, ToUTF8(zMessa
142a0 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ge));..    }....
142b0 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45  #if INTEROP_CODE
142c0 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43  C || INTEROP_INC
142d0 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 69 6e  LUDE_SEE..    in
142e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
142f0 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64  void SetPassword
14300 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64  (byte[] password
14310 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
14320 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
14330 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
14340 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14350 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70  ite3_key(_sql, p
14360 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61  asswordBytes, pa
14370 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
14380 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
14390 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
143a0 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
143b0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
143c0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
143d0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
143e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
143f0 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e  erride void Chan
14400 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  gePassword(byte[
14410 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  ] newPasswordByt
14420 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
14430 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
14440 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
14450 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14460 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
14470 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
14480 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
14490 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
144a0 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
144b0 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
144c0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
144d0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
144e0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
144f0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
14500 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
14510 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
14520 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14530 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 72 6f  ride void SetPro
14540 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f  gressHook(int nO
14550 70 73 2c 20 53 51 4c 69 74 65 50 72 6f 67 72 65  ps, SQLiteProgre
14560 73 73 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ssCallback func)
14570 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
14580 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14590 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 6f  hods.sqlite3_pro
145a0 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 5f 73  gress_handler(_s
145b0 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e 63 2c 20  ql, nOps, func, 
145c0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
145d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
145e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
145f0 69 64 20 53 65 74 41 75 74 68 6f 72 69 7a 65 72  id SetAuthorizer
14600 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75 74 68 6f  Hook(SQLiteAutho
14610 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b 20 66 75  rizerCallback fu
14620 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
14630 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
14640 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 65  thods.sqlite3_se
14650 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 5f 73 71  t_authorizer(_sq
14660 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
14670 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
14680 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14690 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55  erride void SetU
146a0 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65  pdateHook(SQLite
146b0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66  UpdateCallback f
146c0 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
146d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
146e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75  ethods.sqlite3_u
146f0 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  pdate_hook(_sql,
14700 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
14710 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
14720 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14730 72 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d  ride void SetCom
14740 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f  mitHook(SQLiteCo
14750 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e  mmitCallback fun
14760 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
14770 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14780 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
14790 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  mit_hook(_sql, f
147a0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
147b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
147c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
147d0 64 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65  de void SetTrace
147e0 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54  Callback(SQLiteT
147f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  raceCallback fun
14800 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
14810 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14820 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61  hods.sqlite3_tra
14830 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ce(_sql, func, I
14840 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
14850 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14860 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14870 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f  d SetRollbackHoo
14880 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b  k(SQLiteRollback
14890 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
148a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
148b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
148c0 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63  .sqlite3_rollbac
148d0 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  k_hook(_sql, fun
148e0 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
148f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
14900 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
14910 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65    /// Allows the
14920 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f   setting of a lo
14930 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69  gging callback i
14940 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65  nvoked by SQLite
14950 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f   when a..    ///
14960 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72   log event occur
14970 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c  s.  Only one cal
14980 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74  lback may be set
14990 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61  .  If NULL is pa
149a0 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74  ssed,..    /// t
149b0 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  he logging callb
149c0 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65  ack is unregiste
149d0 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
149e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
149f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
14a00 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63  unc">The callbac
14a10 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e  k function to in
14a20 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  voke.</param>.. 
14a30 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
14a40 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74  Returns a result
14a50 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d   code</returns>.
14a60 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14a70 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
14a80 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c  orCode SetLogCal
14a90 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43  lback(SQLiteLogC
14aa0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
14ab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
14ac0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
14ad0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
14ae0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
14af0 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20  onfig_log(..    
14b00 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
14b10 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
14b20 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66  TE_CONFIG_LOG, f
14b30 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
14b40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
14b50 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
14b60 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
14b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
14bd0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
14be0 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e   /// Creates a n
14bf0 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70  ew SQLite backup
14c00 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e   object based on
14c10 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65   the provided de
14c20 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
14c30 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  // database conn
14c40 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75  ection.  The sou
14c50 72 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  rce database con
14c60 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f  nection is the o
14c70 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  ne..    /// asso
14c80 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
14c90 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f   object.  The so
14ca0 75 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61  urce and destina
14cb0 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20  tion database.. 
14cc0 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
14cd0 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65  ns cannot be the
14ce0 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   same...    /// 
14cf0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14d00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14d10 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65  "destCnn">The de
14d20 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
14d30 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
14d40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
14d50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
14d60 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69  tName">The desti
14d70 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
14d80 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
14d90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14da0 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e  me="sourceName">
14db0 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
14dc0 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
14dd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
14de0 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72  rns>The newly cr
14df0 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  eated backup obj
14e00 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
14e10 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14e20 72 72 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b  rride SQLiteBack
14e30 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63  up InitializeBac
14e40 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
14e50 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64  LiteConnection d
14e60 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20  estCnn,..       
14e70 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65   string destName
14e80 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
14e90 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20  g sourceName..  
14ea0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
14eb0 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
14ec0 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Cnn == null)..  
14ed0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14ee0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
14ef0 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43  Exception("destC
14f00 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
14f10 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d   if (destName ==
14f20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14f30 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
14f40 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
14f50 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b  ion("destName");
14f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
14f70 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75  sourceName == nu
14f80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14f90 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
14fa0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
14fb0 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d  ("sourceName");.
14fc0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
14fd0 65 33 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d  e3 destSqlite3 =
14fe0 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73   destCnn._sql as
14ff0 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20   SQLite3;....   
15000 20 20 20 20 20 69 66 20 28 64 65 73 74 53 71 6c       if (destSql
15010 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ite3 == null).. 
15020 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15030 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
15040 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
15050 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
15060 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
15070 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e   has no wrapper.
15080 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
15090 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
150a0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
150b0 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
150c0 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64  e destHandle = d
150d0 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b  estSqlite3._sql;
150e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
150f0 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  destHandle == nu
15100 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15110 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
15120 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15140 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
15150 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
15160 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d  valid handle.",.
15170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15180 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
15190 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
151a0 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73  nnectionHandle s
151b0 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73  ourceHandle = _s
151c0 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
151d0 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  f (sourceHandle 
151e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
151f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15200 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
15210 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
15220 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 75              "Sou
15230 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  rce connection h
15240 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
15250 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
15260 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74      byte[] zDest
15270 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65  Name = ToUTF8(de
15280 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  stName);..      
15290 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65    byte[] zSource
152a0 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f  Name = ToUTF8(so
152b0 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
152c0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
152d0 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48  upHandle backupH
152e0 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  andle = null;...
152f0 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
15300 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15310 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
15320 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
15330 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
15340 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
15350 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
15360 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
15370 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
15380 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55  ntPtr backup = U
15390 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
153a0 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
153b0 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20  p_init(..       
153c0 20 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e           destHan
153d0 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
153e0 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53  sourceHandle, zS
153f0 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ourceName);.... 
15400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
15410 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e  ackup == IntPtr.
15420 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
15430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15440 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
15450 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f 64 65  rCode resultCode
15460 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b   = ResultCode();
15470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15480 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 43 6f      if (resultCo
15490 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  de != SQLiteErro
154a0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
154c0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
154d0 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c 74 43  xception(resultC
154e0 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  ode, GetLastErro
154f0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
15500 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
15530 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61 69 6c  eException("fail
15540 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
15550 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20   backup");..    
15560 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15570 20 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 48           backupH
15580 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
15590 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64  teBackupHandle(d
155a0 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75  estHandle, backu
155b0 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  p);..        }..
155c0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
155d0 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
155e0 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
155f0 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
15600 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
15610 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15620 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72  nEventType.NewCr
15630 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75  iticalHandle, nu
15640 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
15650 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
15660 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  l, backupHandle,
15670 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63   null, new objec
15680 74 5b 5d 20 7b 20 64 65 73 74 43 6e 6e 2c 0d 0a  t[] { destCnn,..
15690 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
156a0 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65  Name, sourceName
156b0 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
156c0 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
156d0 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  teBackup(..     
156e0 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63         this, bac
156f0 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48  kupHandle, destH
15700 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
15710 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d  , sourceHandle,.
15720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f  .            zSo
15730 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  urceName);..    
15740 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
15750 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
15760 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
15770 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
15780 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
15790 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
157a0 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
157b0 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
157c0 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
157d0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
157e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
157f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
15800 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
15810 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
15820 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
15830 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15840 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
15850 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
15860 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
15870 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65  o copy, negative
15880 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d   to copy all rem
15890 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20  aining pages... 
158a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
158b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
158c0 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20  name="retry">.. 
158d0 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72     /// Set to tr
158e0 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  ue if the operat
158f0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
15900 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64  retried due to d
15910 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
15920 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b   locking issues;
15930 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   otherwise, set 
15940 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  to false...    /
15950 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15960 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
15970 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
15980 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70  there are more p
15990 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65  ages to be copie
159a0 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69  d, false otherwi
159b0 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  se...    /// </r
159c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
159d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
159e0 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d  ool StepBackup(.
159f0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
15a00 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20  ackup backup,.. 
15a10 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65         int nPage
15a20 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 62  ,..        ref b
15a30 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20  ool retry..     
15a40 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
15a50 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c       retry = fal
15a60 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
15a70 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
15a80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15a90 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
15aa0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
15ab0 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
15ac0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
15ad0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
15ae0 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
15af0 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
15b00 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
15b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15b20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
15b30 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
15b40 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
15b50 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
15b60 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
15b70 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
15b80 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
15b90 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
15ba0 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
15bb0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
15bc0 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
15bd0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
15be0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
15bf0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
15c00 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
15c10 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
15c20 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
15c30 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
15c40 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
15c50 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
15c60 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
15c70 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15c80 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61  3_backup_step(ha
15c90 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b  ndlePtr, nPage);
15ca0 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70  ..        backup
15cb0 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e  ._stepResult = n
15cc0 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20  ; /* NOTE: Save 
15cd0 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73  for use by Finis
15ce0 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20  hBackup. */.... 
15cf0 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
15d00 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15d10 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
15d20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15d30 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
15d40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
15d50 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
15d60 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
15d70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15d80 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
15d90 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
15da0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
15db0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
15dc0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
15dd0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
15de0 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  de.Locked)..    
15df0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15e00 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
15e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
15e20 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
15e30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
15e40 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
15e50 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
15e60 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
15e70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15e80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
15e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
15ea0 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
15eb0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15ec0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15ed0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
15ee0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
15ef0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
15f00 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
15f10 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
15f20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
15f30 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
15f40 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
15f50 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
15f60 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
15f70 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
15f80 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
15f90 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
15fa0 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
15fb0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
15fc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15fd0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15fe0 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
15ff0 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
16000 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
16010 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
16020 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
16030 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
16040 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
16050 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
16060 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16070 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  ide int Remainin
16080 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  gBackup(..      
16090 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
160a0 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
160b0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
160c0 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
160d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
160e0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
160f0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
16100 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
16110 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
16120 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
16130 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
16140 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
16150 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
16160 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16170 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
16180 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
16190 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
161b0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
161c0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
161d0 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
161e0 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
161f0 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
16200 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
16210 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
16220 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
16230 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
16240 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
16250 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
16260 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
16270 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
16280 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
16290 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
162a0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
162b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
162c0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65  qlite3_backup_re
162d0 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74  maining(handlePt
162e0 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
162f0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16300 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
16310 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
16320 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
16330 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
16340 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
16350 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73    /// with the s
16360 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
16370 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
16380 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
16390 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
163a0 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
163b0 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
163c0 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
163d0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
163e0 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
163f0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
16400 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
16410 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
16420 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16430 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74  de int PageCount
16440 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
16450 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
16460 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
16470 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
16480 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
16490 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
164a0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
164b0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
164c0 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
164d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
164e0 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
164f0 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
16500 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
16510 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
16520 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16530 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16540 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
16550 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
16560 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
16570 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
16580 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
16590 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
165a0 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
165b0 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
165c0 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
165d0 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
165e0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
165f0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
16600 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
16610 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
16620 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
16630 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
16640 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
16650 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
16660 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
16670 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16680 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67  lite3_backup_pag
16690 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72  ecount(handlePtr
166a0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
166b0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
166c0 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73      /// Destroys
166d0 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65   the backup obje
166e0 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b  ct, rolling back
166f0 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74   any backup that
16700 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20   may be in..    
16710 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20  /// progess...  
16720 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16730 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16740 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
16750 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
16760 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61   to destroy.</pa
16770 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
16780 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
16790 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a   FinishBackup(..
167a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
167b0 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
167c0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
167d0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
167e0 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
167f0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
16800 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
16810 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
16820 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
16830 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
16840 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
16850 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
16860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
16870 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
16880 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
16890 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
168a0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
168b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
168c0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
168d0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
168e0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
168f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
16900 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
16910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
16920 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
16930 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
16940 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
16950 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
16960 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
16980 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
16990 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
169a0 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
169b0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
169c0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
169d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
169e0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
169f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16a00 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e  backup_finish_in
16a10 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29  terop(handlePtr)
16a20 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
16a30 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
16a40 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
16a50 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16a60 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
16a70 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e  handlePtr);..#en
16a80 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e  dif..        han
16a90 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49  dle.SetHandleAsI
16aa0 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66  nvalid();....#if
16ab0 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20   COUNT_HANDLE.. 
16ac0 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
16ad0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16ae0 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61  .Ok) || (n == ba
16af0 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
16b00 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c  )) handle.WasRel
16b10 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64  easedOk();..#end
16b20 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  if....        if
16b30 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72   ((n != SQLiteEr
16b40 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
16b50 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n != backup._ste
16b60 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  pResult))..     
16b70 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
16b80 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
16b90 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
16ba0 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
16bb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c10 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
16c20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16c30 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
16c40 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
16c50 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
16c60 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
16c70 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
16c80 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
16c90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16ca0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
16cb0 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
16cc0 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
16cd0 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
16ce0 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
16cf0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
16d00 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
16d10 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
16d20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
16d30 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
16d40 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
16d50 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
16d60 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29   IsInitialized()
16d70 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
16d80 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73   return StaticIs
16d90 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a  Initialized();..
16da0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
16db0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
16dc0 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
16dd0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
16de0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
16df0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
16e00 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
16e10 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
16e20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
16e30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
16e40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
16e50 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
16e60 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
16e70 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
16e80 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
16e90 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
16ea0 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
16eb0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
16ec0 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
16ed0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
16ee0 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f  ernal static boo
16ef0 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  l StaticIsInitia
16f00 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
16f10 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
16f20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50      // BUGFIX: P
16f30 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74  revent races wit
16f40 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20  h other threads 
16f50 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20  for this entire 
16f60 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20  block, due..    
16f70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74      //         t
16f80 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c  o the try/finall
16f90 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65  y semantics.  Se
16fa0 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63  e ticket [72905c
16fb0 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20  9a77]...        
16fc0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  //..        lock
16fd0 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
16fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16ff0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
17000 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76      // NOTE: Sav
17010 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  e the state of t
17020 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73  he logging class
17030 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72   and then restor
17040 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  e it..          
17050 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72    //       after
17060 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20   we are done to 
17070 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f  avoid logging to
17080 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72  o many false err
17090 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ors...          
170a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
170b0 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62    bool savedEnab
170c0 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e  led = SQLiteLog.
170d0 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
170e0 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
170f0 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b  Enabled = false;
17100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17110 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
17120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17130 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
17140 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
17150 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62   This method [ab
17160 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20 74  ]uses the fact t
17170 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  hat SQLite will 
17180 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20  always..        
17190 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
171a0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
171b0 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b  RROR for any unk
171c0 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  nown configurati
171d0 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  on option..     
171e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
171f0 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65      *unless* the
17200 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
17210 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
17220 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20   initialized... 
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17240 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74 20  /       In that 
17250 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77  case it will alw
17260 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ays return SQLIT
17270 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20  E_MISUSE...     
17280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
172a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
172b0 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
172c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
172d0 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20  config_none(..  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
17300 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
17310 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20  FIG_NONE);....  
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17330 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69  turn (rc == SQLi
17340 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75  teErrorCode.Misu
17350 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
17360 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17370 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
17380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17390 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
173a0 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76  og.Enabled = sav
173b0 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  edEnabled;..    
173c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
173d0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
173e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
173f0 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
17400 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
17410 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
17420 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
17430 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
17440 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
17450 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
17460 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
17470 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
17480 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
17490 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
174a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
174b0 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
174c0 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
174d0 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74  with the connect
174e0 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
174f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17500 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
17510 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
17520 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
17530 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17540 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
17550 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
17560 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
17570 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
17580 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
17590 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
175a0 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
175b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
175c0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
175d0 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
175e0 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
175f0 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
17600 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
17610 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
17620 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
17630 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
17640 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
17650 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
17660 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
17670 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
17680 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
17690 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69  aff = typ.Affini
176a0 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61  ty;..      if (a
176b0 66 66 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ff == TypeAffini
176c0 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20  ty.Null) return 
176d0 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
176e0 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75       Type t = nu
176f0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ll;....      if 
17700 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54  (typ.Type != DbT
17710 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20  ype.Object)..   
17720 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20     {..        t 
17730 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
17740 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
17750 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
17760 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69  aff = TypeToAffi
17770 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20  nity(t);..      
17780 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28  }....      if ((
17790 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
177a0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65  nnectionFlags.Ge
177b0 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53  tAllAsText) == S
177c0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
177d0 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78  lags.GetAllAsTex
177e0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  t)..          re
177f0 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
17800 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
17810 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29      switch (aff)
17820 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
17830 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
17840 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
17850 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
17860 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
17870 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74  d && typ.Affinit
17880 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  y == TypeAffinit
17890 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20  y.Text)..       
178a0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
178b0 47 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d  Guid(GetText(stm
178c0 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20  t, index));.... 
178d0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d           int n =
178e0 20 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73   (int)GetBytes(s
178f0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
17900 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20  ull, 0, 0);..   
17910 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
17920 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a  = new byte[n];..
17930 20 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74            GetByt
17940 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
17950 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a  0, b, 0, n);....
17960 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
17970 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
17980 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36  .Guid && n == 16
17990 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
179a0 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62  eturn new Guid(b
179b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
179c0 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20  return b;..     
179d0 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
179e0 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a  nity.DateTime:..
179f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17a00 20 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d   GetDateTime(stm
17a10 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
17a20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
17a30 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
17a40 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
17a50 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
17a60 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
17a70 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
17a80 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
17a90 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44  .ChangeType(GetD
17aa0 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
17ab0 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  x), t, null);.. 
17ac0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
17ad0 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
17ae0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
17af0 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
17b00 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20   GetInt64(stmt, 
17b10 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
17b20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
17b30 6f 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72  of(SByte)) retur
17b40 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c  n GetSByte(stmt,
17b50 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
17b60 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
17b70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72  eof(Byte)) retur
17b80 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20  n GetByte(stmt, 
17b90 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
17ba0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
17bb0 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72  of(Int16)) retur
17bc0 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c  n GetInt16(stmt,
17bd0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
17be0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
17bf0 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74  eof(UInt16)) ret
17c00 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74  urn GetUInt16(st
17c10 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
17c20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
17c30 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72  typeof(Int32)) r
17c40 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73  eturn GetInt32(s
17c50 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
17c60 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
17c70 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29   typeof(UInt32))
17c80 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33   return GetUInt3
17c90 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
17ca0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
17cb0 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36   == typeof(UInt6
17cc0 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  4)) return GetUI
17cd0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
17ce0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
17cf0 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
17d00 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34  ngeType(GetInt64
17d10 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
17d20 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
17d30 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
17d40 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
17d50 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
17d60 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
17d70 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
17d80 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
17d90 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
17da0 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
17db0 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20  t stmt, int db, 
17dc0 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20  int rootPage).. 
17dd0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
17de0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
17df0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
17e00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17e10 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f  ite3_table_curso
17e20 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  r_interop(stmt._
17e30 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c  sqlite_stmt, db,
17e40 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c   rootPage);..#el
17e50 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
17e60 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20   -1;..#endif..  
17e70 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
17e80 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
17e90 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72  g GetRowIdForCur
17ea0 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d  sor(SQLiteStatem
17eb0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75  ent stmt, int cu
17ec0 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  rsor)..    {..#i
17ed0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
17ee0 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72  RD..      long r
17ef0 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  owid = 0;..     
17f00 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17f10 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
17f20 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
17f30 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69  3_cursor_rowid_i
17f40 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
17f50 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72  ite_stmt, cursor
17f60 2c 20 72 65 66 20 72 6f 77 69 64 29 3b 0d 0a 20  , ref rowid);.. 
17f70 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
17f80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
17f90 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b  k) return rowid;
17fa0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
17fb0 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   0;..#else..    
17fc0 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e    return 0;..#en
17fd0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
17fe0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17ff0 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65  ide void GetInde
18000 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49  xColumnExtendedI
18010 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62  nfo(string datab
18020 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65  ase, string inde
18030 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  x, string column
18040 2c 20 72 65 66 20 69 6e 74 20 73 6f 72 74 4d 6f  , ref int sortMo
18050 64 65 2c 20 72 65 66 20 69 6e 74 20 6f 6e 45 72  de, ref int onEr
18060 72 6f 72 2c 20 72 65 66 20 73 74 72 69 6e 67 20  ror, ref string 
18070 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
18080 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
18090 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
180a0 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
180b0 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ll = IntPtr.Zero
180c0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  ;..      int col
180d0 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20  llen = 0;..     
180e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
180f0 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63   rc;....      rc
18100 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
18110 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
18120 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f  ndex_column_info
18130 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
18140 6f 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c  oUTF8(database),
18150 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20   ToUTF8(index), 
18160 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
18170 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65  ref sortMode, re
18180 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 63  f onError, ref c
18190 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c 65 6e  oll, ref colllen
181a0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
181b0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
181c0 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
181d0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
181e0 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a  n(rc, null);....
181f0 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53        collationS
18200 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f  equence = UTF8To
18210 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c  String(coll, col
18220 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  llen);..#else.. 
18230 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20       sortMode = 
18240 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f  0;..      onErro
18250 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f  r = 2;..      co
18260 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
18270 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e  = "BINARY";..#en
18280 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
18290 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
182a0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
182b0 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28  ode FileControl(
182c0 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20  string zDbName, 
182d0 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70  int op, IntPtr p
182e0 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Arg)..    {..   
182f0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
18300 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18310 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
18320 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d  ol(_sql, (zDbNam
18330 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55  e != null) ? ToU
18340 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e  TF8(zDbName) : n
18350 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d  ull, op, pArg);.
18360 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..