System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 367fd3c038b69e9736c3ceb9364c832acdaea03d:


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 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 33 2e 30  sion = "1.0.83.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0b00: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0b10: 61 79 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ay;....    inter
0b20: 6e 61 6c 20 53 51 4c 69 74 65 33 28 53 51 4c 69  nal SQLite3(SQLi
0b30: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0b40: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
0b50: 6b 69 6e 64 29 0d 0a 20 20 20 20 20 20 3a 20 62  kind)..      : b
0b60: 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 29 0d 0a  ase(fmt, kind)..
0b70: 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      {..    }....
0b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0be0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0bf0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
0c00: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
0c10: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
0c20: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
0c30: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0c40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
0c50: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
0c60: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
0c70: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
0c80: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
0ca0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
0cb0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
0cc0: 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e  ypeof(SQLite3).N
0cd0: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
0ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0d50: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
0d60: 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
0d70: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
0d80: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
0d90: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
0da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
0db0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
0dc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0de0: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e00: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
0e10: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e50: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
0e60: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
0e70: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
0e90: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
0ec0: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
0f10: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
0f20: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
0f30: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0f80: 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28            Close(
0f90: 66 61 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f  false); /* Dispo
0fa0: 73 69 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72  sing, cannot thr
0fb0: 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ow. */....      
0fc0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
0fd0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
0fe0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0ff0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
1000: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
1010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
1020: 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f  se.Dispose(dispo
1030: 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20 20  sing);..        
1040: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
1050: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10c0: 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e  ...    // It isn
10d0: 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  't necessary to 
10e0: 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63  cleanup any func
10f0: 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69  tions we've regi
1100: 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20  stered.  If the 
1110: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..    
1120: 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70  // goes to the p
1130: 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72  ool and is resur
1140: 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65  rected later, re
1150: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
1160: 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77  tions will overw
1170: 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rite the..    //
1180: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
1190: 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ons.  The SQLite
11a0: 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61  FunctionCookieHa
11b0: 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  ndle will take c
11c0: 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75  are of freeing u
11d0: 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f  nmanaged..    //
11e0: 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e   resources belon
11f0: 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76  ging to the prev
1200: 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65  iously-registere
1210: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  d functions...  
1220: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1230: 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62  ide void Close(b
1240: 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
1250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
1260: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1280: 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
1290: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12b0: 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74  SQLiteBase.Reset
12c0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c  Connection(_sql,
12d0: 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29   _sql, canThrow)
12e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1300: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1310: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f  ectionPool.Add(_
1320: 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20  fileName, _sql, 
1330: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a  _poolVersion);..
1340: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1350: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1360: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1380: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
1390: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
13a0: 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73  e (Pool) Success
13b0: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
13c0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
13d0: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
13e0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
13f0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1400: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
1410: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1420: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1430: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1440: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
1450: 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28  .Format("Close (
1460: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
1470: 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 20 20  0}", _sql));..  
1480: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1490: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
14a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
14b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
14c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
14d0: 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  sql.Dispose();..
14e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14f0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
1500: 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ll;..      }..  
1510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1580: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1590: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
15a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
15d0: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
15e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
15f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
1600: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
1610: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1620: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1630: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
1640: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
1650: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1660: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1670: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 66 69  atic string Defi
1680: 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..   
1690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
16a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16b0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
16c0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
16d0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
16e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
16f0: 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c   IList<string> l
1700: 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69  ist = SQLiteDefi
1710: 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69  neConstants.Opti
1720: 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
1730: 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 20         if (list 
1740: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1750: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1760: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1770: 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
1780: 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20   in list)..     
1790: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
17c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1800: 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67   if (result.Leng
1810: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
1840: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
1850: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1860: 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e  lt.Append(elemen
1870: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
1880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1890: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18a0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
18b0: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
18c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
18d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
18e0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
18f0: 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20  QLiteVersion..  
1900: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
1910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1920: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
1930: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
1940: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1950: 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d  _libversion(), -
1960: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
1970: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1980: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
1990: 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64  g SQLiteSourceId
19a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
19b0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
19c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
19d0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
19e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
19f0: 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c  ite3_sourceid(),
1a00: 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   -1);..      }..
1a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1a20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
1a30: 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a  ool AutoCommit..
1a40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1a50: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1a60: 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f     return IsAuto
1a70: 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71  commit(_sql, _sq
1a80: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
1a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1aa0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
1ab0: 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49  g LastInsertRowI
1ac0: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
1ad0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69  get..      {..#i
1ae0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
1af0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
1b00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1b10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b20: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
1b30: 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29  sert_rowid(_sql)
1b40: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1b50: 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30    long rowId = 0
1b60: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
1b70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1b80: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
1b90: 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  rt_rowid_interop
1ba0: 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64  (_sql, ref rowId
1bb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
1bc0: 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6e 64 69  rn rowId;..#endi
1bd0: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
1be0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1bf0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
1c00: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20  hanges..    {.. 
1c10: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
1c20: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
1c30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1c40: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1c50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1c60: 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65  te3_changes_inte
1c70: 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73  rop(_sql);..#els
1c80: 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  e..        retur
1c90: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
1ca0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
1cb0: 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65  anges(_sql);..#e
1cc0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ndif..      }.. 
1cd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1ce0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
1cf0: 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ng MemoryUsed.. 
1d00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1d10: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  .      {..#if !P
1d20: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
1d30: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
1d40: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1d50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1d60: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
1d70: 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ();..#else..    
1d80: 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d      long bytes =
1d90: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73   0;..        Uns
1da0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1db0: 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  .sqlite3_memory_
1dc0: 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66  used_interop(ref
1dd0: 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20   bytes);..      
1de0: 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d    return bytes;.
1df0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
1e00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1e10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1e20: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68   long MemoryHigh
1e30: 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  water..    {..  
1e40: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1e50: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
1e60: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
1e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1e80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1e90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
1ea0: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29  ory_highwater(0)
1eb0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1ec0: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
1ed0: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
1ee0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ef0: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69  qlite3_memory_hi
1f00: 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28  ghwater_interop(
1f10: 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a  0, ref bytes);..
1f20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
1f30: 79 74 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ytes;..#endif.. 
1f40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1f50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1f60: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
1f70: 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79  orCode SetMemory
1f80: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
1f90: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
1fa0: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
1fb0: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
1fc0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
1fd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
1fe0: 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f  tatic SQLiteErro
1ff0: 72 43 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d  rCode StaticSetM
2000: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
2010: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
2020: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
2030: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
2040: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2050: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
2060: 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
2070: 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
2080: 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
2090: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76  FIG_MEMSTATUS, v
20a0: 61 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  alue ? 1 : 0);..
20b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
20c0: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
20d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
20e0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
20f0: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
2100: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
2110: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
2120: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
2130: 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d  config options..
2140: 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65  .    /// We depe
2150: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
2160: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
2170: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
2180: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
2190: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
21a0: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
21b0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
21c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
21d0: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
21e0: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  de Shutdown().. 
21f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
2200: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
2210: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2220: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
2230: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
2240: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
2250: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2260: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
2270: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
2280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2290: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
22a0: 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e  l) && !_sql.IsIn
22b0: 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49  valid && !_sql.I
22c0: 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d  sClosed;..    }.
22d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
22e0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70  override void Op
22f0: 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c  en(string strFil
2300: 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e  ename, SQLiteCon
2310: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e  nectionFlags con
2320: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51  nectionFlags, SQ
2330: 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75  LiteOpenFlagsEnu
2340: 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74  m openFlags, int
2350: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f   maxPoolSize, bo
2360: 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  ol usePool)..   
2370: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73   {..      if (_s
2380: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75  ql != null) retu
2390: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73  rn;....      _us
23a0: 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b  ePool = usePool;
23b0: 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d  ..      _fileNam
23c0: 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b  e = strFilename;
23d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73  ....      if (us
23e0: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d  ePool)..      {.
23f0: 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20  .        _sql = 
2400: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2410: 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46  Pool.Remove(strF
2420: 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c  ilename, maxPool
2430: 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56  Size, out _poolV
2440: 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20  ersion);....#if 
2450: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
2460: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
2470: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61  ION..        Tra
2480: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
2490: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e  ing.Format("Open
24a0: 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28   (Pool): {0}", (
24b0: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  _sql != null) ? 
24c0: 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20  _sql.ToString() 
24d0: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23  : "<null>"));..#
24e0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
24f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
2500: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
2520: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2530: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2540: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2550: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
2560: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
2570: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
2580: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
2590: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25a0: 49 6e 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20  IntPtr db;..    
25b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
25c0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
25d0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
25e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
25f0: 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  (connectionFlags
2600: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
2610: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e  ionFlags.NoExten
2620: 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21  sionFunctions) !
2630: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
2640: 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73  onFlags.NoExtens
2650: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20  ionFunctions).. 
2660: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2670: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
2680: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2690: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
26a0: 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46  erop(ToUTF8(strF
26b0: 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c  ilename), openFl
26c0: 61 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20  ags, out db);.. 
26d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26e0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
26f0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  if..          {.
2700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
2710: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2720: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
2730: 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46  n_v2(ToUTF8(strF
2740: 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62  ilename), out db
2750: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74  , openFlags, Int
2760: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
2770: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
2780: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2790: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
27a0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72  ON..          Tr
27b0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
27c0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65  ring.Format("Ope
27d0: 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a  n: {0}", db));..
27e0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
27f0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
2800: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
2810: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
2820: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75  eException(n, nu
2830: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
2840: 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74  _sql = new SQLit
2850: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
2860: 65 28 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  e(db);..        
2870: 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  }..        lock 
2880: 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b  (_sql) { /* HACK
2890: 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63  : Force the Sync
28a0: 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65  Block to be "cre
28b0: 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d  ated" now. */ }.
28c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
28d0: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
28e0: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
28f0: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
2900: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
2910: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
2920: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
2930: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
2940: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
2950: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
2960: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66  e old...      _f
2970: 75 6e 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20  unctionsArray = 
2980: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
2990: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
29a0: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
29b0: 67 73 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54  gs);..      SetT
29c0: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
29d0: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
29e0: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
29f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2a00: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
2a10: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
2a20: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2a30: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
2a40: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
2a50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2a60: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2a70: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
2a80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2a90: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
2aa0: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
2ab0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2ac0: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
2ad0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
2ae0: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
2af0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
2b00: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
2b10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
2b20: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
2b30: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
2b40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2b50: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
2b60: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
2b70: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
2b80: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
2b90: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
2ba0: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
2bb0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
2bc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2bd0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
2be0: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
2bf0: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
2c00: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
2c10: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
2c20: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2c30: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
2c40: 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d  (_sql, nTimeoutM
2c50: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
2c60: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
2c70: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
2c80: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
2c90: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
2ca0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
2cb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2cc0: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
2cd0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2ce0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
2cf0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
2d00: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61  ode n;..      Ra
2d10: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
2d20: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
2d30: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
2d40: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
2d50: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e  ount;..      uin
2d60: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e  t timeout = (uin
2d70: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
2d80: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
2d90: 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20   * 1000);....   
2da0: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
2db0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2dc0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2dd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2de0: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
2df0: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  ite_stmt);....  
2e00: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
2e10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
2e20: 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b  ow) return true;
2e30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
2e40: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
2e50: 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20  de.Done) return 
2e60: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2e70: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
2e80: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
2e90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ea0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
2eb0: 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20  Code r;....     
2ec0: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
2ed0: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
2ee0: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
2ef0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
2f00: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
2f10: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
2f20: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
2f30: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
2f40: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
2f50: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
2f60: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
2f70: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
2f80: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
2f90: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
2fa0: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
2fb0: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
2fc0: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
2fd0: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
2fe0: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
2ff0: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c      if (r == SQL
3000: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
3010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3020: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
3030: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
3040: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
3050: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
3060: 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((r == SQLiteEr
3070: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
3080: 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | r == SQLiteErr
3090: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
30a0: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d  stmt._command !=
30b0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30d0: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
30e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
30f0: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
3100: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
3110: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
3120: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
3130: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
3140: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
3150: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
3160: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
3170: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
3180: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
3190: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
31a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
31b0: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
31c0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
31d0: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
31e0: 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut)..           
31f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3200: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3210: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47  teException(r, G
3220: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
3230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3240: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
3250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
3270: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
3280: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
3290: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
32a0: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
32b0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
32c0: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
32d0: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
32e0: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
32f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3300: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
3310: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3320: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3330: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
3340: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
3350: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3360: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
3370: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3380: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
3390: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
33a0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
33b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
33c0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
33d0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
33e0: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
33f0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
3400: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3410: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
3420: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
3430: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
3440: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
3450: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
3460: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
3470: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
3480: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3490: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
34a0: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
34b0: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
34c0: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
34d0: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
34e0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
34f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
3500: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
3510: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
3520: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
3530: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
3540: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
3550: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
3560: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
3570: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
3580: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
3590: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
35a0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
35b0: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
35c0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
35d0: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
35e0: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
35f0: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
3600: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
3610: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
3620: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
3630: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3640: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
3650: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
3660: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
3670: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
3680: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
3690: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
36a0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
36b0: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
36c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36d0: 20 20 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74     return (SQLit
36e0: 65 45 72 72 6f 72 43 6f 64 65 29 28 2d 31 29 3b  eErrorCode)(-1);
36f0: 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b   // Reset was OK
3700: 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68  , with schema ch
3710: 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ange..      }.. 
3720: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
3730: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
3740: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
3750: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3760: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
3770: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20   return n;....  
3780: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
3790: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
37a0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
37b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
37c0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
37d0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
37e0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
37f0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 20 2f 2f 20 57  rorCode.Ok; // W
3800: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
3810: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
3820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3830: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
3840: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
3850: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
3860: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
3870: 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72  ase.GetLastError
3880: 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20  (_sql, _sql);.. 
3890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
38a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
38b0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
38c0: 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e  epare(SQLiteConn
38d0: 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69  ection cnn, stri
38e0: 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74  ng strSql, SQLit
38f0: 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69  eStatement previ
3900: 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75  ous, uint timeou
3910: 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  tMS, out string 
3920: 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20  strRemain)..    
3930: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  {..      if (!St
3940: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
3950: 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20  ty(strSql))..   
3960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
3970: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
3980: 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  E: SQLite does n
3990: 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63  ot support the c
39a0: 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61  oncept of separa
39b0: 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20  te schemas..    
39c0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20      //       in 
39d0: 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68  one database; th
39e0: 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20  erefore, remove 
39f0: 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20  the base schema 
3a00: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  name..        //
3a10: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73         used to s
3a20: 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f  mooth integratio
3a30: 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20  n with the base 
3a40: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a  .NET Framework..
3a50: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3a60: 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a   data classes...
3a70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3a80: 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53      string baseS
3a90: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e  chemaName = (cnn
3aa0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
3ab0: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20  _baseSchemaName 
3ac0: 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
3ad0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
3ae0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73  sNullOrEmpty(bas
3af0: 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20  eSchemaName)).. 
3b00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b10: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
3b20: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
3b40: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
3b50: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
3b60: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
3b70: 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c         "[{0}].",
3b80: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29   baseSchemaName)
3b90: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
3ba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
3bb0: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
3bc0: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
3bd0: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
3be0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
3bf0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
3c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3c10: 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68   "{0}.", baseSch
3c20: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
3c30: 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
3c40: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
3c50: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
3c60: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
3c70: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28  s =..          (
3c80: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
3c90: 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74  nn.Flags : SQLit
3ca0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3cb0: 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23 69 66  .Default;....#if
3cc0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
3cd0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
3ce0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
3cf0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
3d00: 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65  Flags.LogPrepare
3d10: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
3d20: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
3d30: 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d  epare)..      {.
3d40: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
3d50: 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20  strSql == null) 
3d60: 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74  || (strSql.Lengt
3d70: 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53  h == 0) || (strS
3d80: 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68  ql.Trim().Length
3d90: 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20   == 0))..       
3da0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
3db0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65  .LogMessage("Pre
3dc0: 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67  paring {<nothing
3dd0: 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20  >}...");..      
3de0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
3df0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
3e00: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
3e10: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
3e30: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
3e40: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70  ntCulture, "Prep
3e50: 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e  aring {{{0}}}...
3e60: 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20  ", strSql));..  
3e70: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
3e80: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74  .      IntPtr st
3e90: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
3ea0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
3eb0: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
3ec0: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  o;..      int le
3ed0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
3ee0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
3ef0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3f00: 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20  e.Schema;..     
3f10: 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30   int retries = 0
3f20: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
3f30: 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71  b = ToUTF8(strSq
3f40: 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  l);..      strin
3f50: 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c  g typedefs = nul
3f60: 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  l;..      SQLite
3f70: 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20  Statement cmd = 
3f80: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e  null;..      Ran
3f90: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
3fa0: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
3fb0: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
3fc0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
3fd0: 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43  unt;....      GC
3fe0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
3ff0: 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62  GCHandle.Alloc(b
4000: 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50  , GCHandleType.P
4010: 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49  inned);..      I
4020: 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e  ntPtr psql = han
4030: 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64  dle.AddrOfPinned
4040: 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20  Object();..     
4050: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
4060: 48 61 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74  Handle statement
4070: 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  Handle = null;..
4080: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
4090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c   {..        whil
40a0: 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  e ((n == SQLiteE
40b0: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20  rrorCode.Schema 
40c0: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
40d0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
40e0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
40f0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
4100: 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20  retries < 3)..  
4110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4120: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
4130: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4140: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
4150: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
4160: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
4170: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
4180: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
4190: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
41a0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
41b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
41c0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
41d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
41e0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
41f0: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71  nterop(_sql, psq
4200: 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  l, b.Length - 1,
4210: 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70   out stmt, out p
4220: 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23  tr, out len);..#
4230: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4240: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
4250: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4260: 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20  3_prepare(_sql, 
4270: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
4280: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
4290: 74 20 70 74 72 29 3b 0d 0a 20 20 20 20 20 20 20  t ptr);..       
42a0: 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a       len = -1;..
42b0: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e  #endif....#if !N
42c0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
42d0: 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54   TRACE_STATEMENT
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
42f0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
4300: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72 65  ring.Format("Pre
4310: 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22  pare ({0}): {1}"
4320: 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65  , n, stmt));..#e
4330: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
4340: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
4350: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4360: 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e  ) && (stmt != In
4370: 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
4380: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
4390: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77  mentHandle = new
43a0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
43b0: 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d  Handle(_sql, stm
43c0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  t);..          }
43d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
43e0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
43f0: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
4400: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
4410: 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ies++;..        
4420: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
4430: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4440: 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20  Error)..        
4450: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4460: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
4470: 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72  are(GetLastError
4480: 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45  (), "near \"TYPE
4490: 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  S\": syntax erro
44a0: 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  r", StringCompar
44b0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
44c0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
44d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
44f0: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64  pos = strSql.Ind
4500: 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20  exOf(';');..    
4510: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f            if (po
4520: 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73  s == -1) pos = s
4530: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31  trSql.Length - 1
4540: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4550: 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74     typedefs = st
4560: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
4570: 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20  , pos + 1);..   
4580: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
4590: 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  l = strSql.Subst
45a0: 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a  ring(pos + 1);..
45b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45c0: 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d  strRemain = "";.
45d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
45e0: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
45f0: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
4600: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
4610: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4620: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
4630: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
4640: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
4650: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
4660: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4680: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
4690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
46b0: 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75     if (cmd != nu
46c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
46d0: 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65       cmd.SetType
46e0: 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a  s(typedefs);....
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4700: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
4710: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e         }..#if (N
4720: 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20  ET_35 || NET_40 
4730: 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20 21 50  || NET_45) && !P
4740: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4750: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4760: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
4770: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
4780: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
4790: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
47a0: 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f  tError(), 0, "no
47b0: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d   such table: TEM
47c0: 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36  P.SCHEMA", 0, 26
47d0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
47e0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
47f0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
4800: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4810: 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d            strRem
4820: 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20 20  ain = "";..     
4830: 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69           _buildi
4840: 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b  ngSchema = true;
4850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4860: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
4870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4880: 20 20 20 20 20 20 49 53 51 4c 69 74 65 53 63 68        ISQLiteSch
4890: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78  emaExtensions ex
48a0: 74 20 3d 20 28 28 49 53 65 72 76 69 63 65 50 72  t = ((IServicePr
48b0: 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46 61 63  ovider)SQLiteFac
48c0: 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47  tory.Instance).G
48d0: 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66  etService(typeof
48e0: 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78  (ISQLiteSchemaEx
48f0: 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53  tensions)) as IS
4900: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
4910: 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  sions;....      
4920: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78            if (ex
4930: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
4950: 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d  t.BuildTempSchem
4960: 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  a(cnn);....     
4970: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
4980: 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26   (cmd == null &&
4990: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e   strSql.Length >
49a0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
49b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
49c0: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
49d0: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
49e0: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
49f0: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
4a00: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4a20: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
4a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4a50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
4a60: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
4a70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4a80: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
4a90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75               _bu
4ab0: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66  ildingSchema = f
4ac0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
4ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4ae0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
4af0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4b00: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
4b10: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4b20: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
4b30: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4b40: 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b  de.Busy) // Lock
4b50: 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d  ed -- delay a sm
4b60: 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72  all amount befor
4b70: 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20  e retrying..    
4b80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4b90: 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79       // Keep try
4ba0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
4bb0: 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c   if (rnd == null
4bc0: 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20  ) // First time 
4bd0: 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65  we've encountere
4be0: 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20  d the lock..    
4bf0: 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20            rnd = 
4c00: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d  new Random();...
4c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
4c20: 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65  If we've exceede
4c30: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20  d the command's 
4c40: 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70  timeout, give up
4c50: 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72   and throw an er
4c60: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
4c70: 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72   if ((uint)Envir
4c80: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
4c90: 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74   - starttick > t
4ca0: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20  imeoutMS)..     
4cb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4cc0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4cd0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4ce0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
4cf0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
4d00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4d10: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
4d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4d30: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
4d40: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
4d50: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
4d60: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
4d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
4d80: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
4d90: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
4da0: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
4db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4dd0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4de0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
4df0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
4e00: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
4e10: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
4e20: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
4e30: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
4e40: 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  n = UTF8ToString
4e50: 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  (ptr, len);.... 
4e60: 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65         if (state
4e70: 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75  mentHandle != nu
4e80: 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51  ll) cmd = new SQ
4e90: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68  LiteStatement(th
4ea0: 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74 65  is, flags, state
4eb0: 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53  mentHandle, strS
4ec0: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
4ed0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
4ee0: 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68  strRemain.Length
4ef0: 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d  ), previous);...
4f00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4f10: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  cmd;..      }.. 
4f20: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
4f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68      {..        h
4f40: 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20  andle.Free();.. 
4f50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4f60: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4f70: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4f80: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
4f90: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
4fa0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
4fb0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
4fc0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
4fd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
4fe0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
4ff0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
5000: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
5010: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
5020: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
5030: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
5040: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
5050: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55  amter #{1} as NU
5060: 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  LL...",..       
5070: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5080: 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  r, index));..   
5090: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
50a0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
50b0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
50c0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
50d0: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
50e0: 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65   ValueType value
50f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5100: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
5110: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
5120: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
5130: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5140: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
5150: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
5160: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
5170: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
5180: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
5190: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
51a0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
51b0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
51c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74  index, value.Get
51d0: 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b  Type(), value));
51e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
51f0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
5200: 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54  ring FormatDateT
5210: 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c  ime(DateTime val
5220: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5230: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
5240: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
5250: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
5260: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ...        resul
5270: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54  t.Append(value.T
5280: 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d  oString("yyyy-MM
5290: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -ddTHH:mm:ss.FFF
52a0: 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20  FFFFK"));..     
52b0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
52c0: 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (' ');..        
52d0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
52e0: 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  lue.Kind);..    
52f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
5300: 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20  d(' ');..       
5310: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
5320: 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a  alue.Ticks);....
5330: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
5340: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
5350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5360: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5370: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5380: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5390: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
53a0: 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20  index, DateTime 
53b0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
53c0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
53d0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
53e0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
53f0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
5400: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
5410: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
5420: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
5430: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
5440: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
5450: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
5460: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
5470: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
5480: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
5490: 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f  of(DateTime), Fo
54a0: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c  rmatDateTime(val
54b0: 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ue)));..    }...
54c0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
54d0: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
54e0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
54f0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
5500: 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69   int index, stri
5510: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
5520: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
5530: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
5540: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
5550: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
5560: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
5570: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
5580: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
5590: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
55a0: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
55b0: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
55c0: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
55d0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
55e0: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74  IntPtr, index, t
55f0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28  ypeof(String), (
5600: 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  value != null) ?
5610: 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e   value : "<null>
5620: 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  "));..    }.... 
5630: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
5640: 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64  c string ToHexad
5650: 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20  ecimalString(.. 
5660: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72         byte[] ar
5670: 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ray..        )..
5680: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
5690: 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c  f (array == null
56a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
56b0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
56c0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
56d0: 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65  lder result = ne
56e0: 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
56f0: 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32  array.Length * 2
5700: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  );....        in
5710: 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79  t length = array
5720: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
5730: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
5740: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
5750: 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
5760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5770: 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61  sult.Append(arra
5780: 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e  y[index].ToStrin
5790: 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20  g("x2"));....   
57a0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
57b0: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
57c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
57d0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
57e0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
57f0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
5800: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
5810: 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  ex, byte[] value
5820: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5830: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
5840: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
5850: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
5860: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5870: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
5890: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
58a0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
58b0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
58c0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
58d0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
58e0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
58f0: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79  index, typeof(By
5900: 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d  te[]), (value !=
5910: 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64   null) ? ToHexad
5920: 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c  ecimalString(val
5930: 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  ue) : "<null>"))
5940: 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
5950: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5960: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
5970: 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74  ind_Double(SQLit
5980: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5990: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
59a0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
59b0: 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20  t index, double 
59c0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
59d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
59e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
59f0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
5a00: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
5a10: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5a20: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5a30: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
5a40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5a50: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
5a60: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
5a70: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
5a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5a90: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
5aa0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
5ab0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
5ac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
5ad0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
5ae0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5af0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
5b00: 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c  ind_double(handl
5b10: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
5b20: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5b30: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
5b40: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
5b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5b60: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e  3_bind_double_in
5b70: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
5b80: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
5b90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5ba0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
5bb0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
5bc0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5bd0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
5be0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
5bf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5c00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
5c10: 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c  d Bind_Int32(SQL
5c20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
5c30: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
5c40: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
5c50: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76  int index, int v
5c60: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
5c70: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
5c80: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
5c90: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
5ca0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
5cb0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
5cc0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
5cd0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
5ce0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5cf0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
5d00: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
5d10: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5d20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5d30: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
5d40: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5d50: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
5d60: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
5d70: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
5d80: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
5d90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5da0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
5db0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5dc0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
5dd0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
5de0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
5df0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5e00: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
5e10: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
5e20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5e30: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
5e40: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
5e50: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5e60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e70: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
5e80: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
5e90: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5ea0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
5eb0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
5ec0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
5ed0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
5ee0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5ef0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5f00: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5f10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5f20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
5f30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5f40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
5f50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5f60: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
5f70: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
5f80: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
5f90: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
5fa0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5fb0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5fc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5fd0: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68  ite3_bind_uint(h
5fe0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5ff0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
6000: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6010: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6020: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6030: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6040: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
6050: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6060: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
6070: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
6080: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
6090: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
60a0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
60b0: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
60c0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
60d0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
60e0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
60f0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6100: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6110: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6120: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6130: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6140: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6150: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6160: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6170: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6190: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
61a0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
61b0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
61c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
61d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
61e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
61f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6200: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
6210: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6220: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51  else..        SQ
6230: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
6240: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6250: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
6260: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
6270: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6280: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
6290: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
62a0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
62b0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
62c0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
62d0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
62e0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
62f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6300: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
6310: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
6320: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
6330: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6340: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
6350: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
6360: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
6370: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6380: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6390: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
63a0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
63b0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
63c0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
63d0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
63e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
63f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6400: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6410: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6430: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6440: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6450: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
6460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6470: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6480: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6490: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
64a0: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
64b0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
64c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53  #else..        S
64d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
64e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
64f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6500: 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72  ind_uint64_inter
6510: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
6520: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
6530: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
6540: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6550: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6560: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6570: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6580: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
6590: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
65a0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
65b0: 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53  ind_Text(SQLiteS
65c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
65d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
65e0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
65f0: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
6600: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
6610: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
6620: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
6630: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
6640: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
6650: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6660: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6670: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
6680: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6690: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
66a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
66b0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
66c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
66d0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
66e0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
66f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
6700: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
6710: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
6720: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a  ToUTF8(value);..
6730: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6740: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
6760: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6770: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
6780: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
6790: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
67a0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
67b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
67c0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
67d0: 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20  index, b);..    
67e0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
67f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
6800: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6810: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6820: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
6830: 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  xt(handle, index
6840: 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  , b, b.Length - 
6850: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
6860: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
6870: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
6880: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
6890: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
68a0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
68b0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
68c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
68d0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
68e0: 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
68f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
6900: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6910: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
6920: 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20  index, DateTime 
6930: 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dt)..    {..    
6940: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6950: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6960: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6970: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6980: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6990: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
69a0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
69b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
69c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
69d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
69e0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
69f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6a00: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6a10: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74  andle, index, dt
6a20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
6a30: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
6a40: 20 73 77 69 74 63 68 20 28 5f 64 61 74 65 74 69   switch (_dateti
6a50: 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20  meFormat)..     
6a60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a70: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
6a80: 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d  eFormats.Ticks:.
6a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6aa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6ab0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
6ac0: 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a  ue = dt.Ticks;..
6ad0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6ae0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b00: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
6b10: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6b20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6b30: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
6b40: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6b50: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
6b60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
6b90: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
6ba0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6bb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6be0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6bf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6c00: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
6c10: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
6c20: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
6c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
6c40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6c50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6c60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6c70: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
6c80: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
6c90: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
6ca0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6cb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
6cc0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
6cd0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
6ce0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6cf0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6d00: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
6d10: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6d40: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
6d50: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
6d60: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
6d70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6d80: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
6d90: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
6da0: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
6db0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6dc0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6de0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
6df0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6e00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
6e10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6e20: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
6e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
6e70: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
6eb0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6ec0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6ed0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6ee0: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
6ef0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6f00: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6f20: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6f30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6f40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6f50: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
6f60: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
6f70: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
6f80: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
6f90: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
6fa0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6fb0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
6fc0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6fd0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6fe0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6ff0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
7020: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
7030: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
7040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7060: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61           long va
7070: 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  lue = Convert.To
7080: 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63  Int64(dt.Subtrac
7090: 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74  t(UnixEpoch).Tot
70a0: 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23  alSeconds);....#
70b0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
70c0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70e0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
70f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7100: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7110: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7120: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7140: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7160: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
7170: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7190: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
71b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
71c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
71d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
71e0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
71f0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7200: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
7210: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7220: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7230: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7240: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7250: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
7260: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
7270: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
7280: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
7290: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
72a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
72b0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
72c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
72d0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
72e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
72f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
7320: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
7330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
7350: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
7360: 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  (dt);....#if !PL
7370: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7380: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
73a0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
73b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
73c0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
73d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
73e0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7400: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7410: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
7420: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
7430: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , b);..         
7440: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
7450: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7460: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7470: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7480: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7490: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
74a0: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
74b0: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
74c0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
74d0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
74e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
74f0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7500: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7510: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7520: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7530: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
7540: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
7550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7560: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
7570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
7590: 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51  oid Bind_Blob(SQ
75a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
75b0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
75c0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
75d0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
75e0: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20  [] blobData)..  
75f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7600: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
7610: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
7620: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
7630: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
7640: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7650: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
7660: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
7670: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7680: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
7690: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
76a0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
76b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
76c0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
76d0: 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29  index, blobData)
76e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
76f0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7700: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7710: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7720: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7730: 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65  bind_blob(handle
7740: 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74  , index, blobDat
7750: 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67  a, blobData.Leng
7760: 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29  th, (IntPtr)(-1)
7770: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
7780: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7790: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
77a0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
77b0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
77c0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
77d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
77e0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
77f0: 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  _Null(SQLiteStat
7800: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7810: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7820: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7830: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
7840: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7850: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7860: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7870: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
7880: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7890: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
78a0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
78b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
78c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
78d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
78e0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
78f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7900: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7910: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
7920: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
7930: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  f....        SQL
7940: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7950: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7960: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7970: 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69  d_null(handle, i
7980: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
7990: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
79a0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
79b0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
79c0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
79d0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
79e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
79f0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
7a00: 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53  ind_ParamCount(S
7a10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7a20: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7a30: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7a40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7a50: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
7a60: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
7a70: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
7a80: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
7a90: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
7aa0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7ab0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7ac0: 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65  ter_count(handle
7ad0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
7ae0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7af0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
7b00: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7b10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7b20: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7b30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7b40: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7b50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7b60: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
7b70: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
7b80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7b90: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
7ba0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
7bb0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
7bc0: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
7bd0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
7be0: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
7c00: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
7c10: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
7c20: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
7c30: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
7c40: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7c50: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7c60: 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61  e string Bind_Pa
7c70: 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  ramName(SQLiteSt
7c80: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
7c90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7ca0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
7cb0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
7cc0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
7cd0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
7ce0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
7cf0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
7d00: 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d   string name;...
7d10: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
7d20: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69  NDARD..        i
7d30: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20  nt len;..       
7d40: 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74   name = UTF8ToSt
7d50: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
7d60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7d70: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7d80: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e  name_interop(han
7d90: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  dle, index, out 
7da0: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
7db0: 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  se..        name
7dc0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
7dd0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7de0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7df0: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28  _parameter_name(
7e00: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20  handle, index), 
7e10: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  -1);..#endif....
7e20: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7e30: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7e40: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7e50: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7e60: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7e70: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7e80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7e90: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
7eb0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
7ec0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
7ed0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
7ee0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
7ef0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70  "Statement {0} p
7f20: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d  aramter #{1} nam
7f30: 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d  e is {{{2}}}.",.
7f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7f50: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
7f60: 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20  ndex, name));.. 
7f70: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
7f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
7f90: 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d  rn name;..    }.
7fa0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7fb0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
7fc0: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
7fd0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7fe0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
7ff0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
8000: 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65  string paramName
8010: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8020: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8030: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
8040: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
8050: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
8060: 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e   index = UnsafeN
8070: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8080: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8090: 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65  ter_index(handle
80a0: 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61  , ToUTF8(paramNa
80b0: 6d 65 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  me));....#if !PL
80c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
80d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
80e0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
80f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8100: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
8110: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8120: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
8130: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8140: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
8150: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
8160: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
8170: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
8180: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
8190: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
81a0: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
81b0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
81c0: 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b   index of name {
81d0: 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22  {{1}}} is #{2}."
81e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
81f0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
8200: 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65   paramName, inde
8210: 78 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  x));..        }.
8220: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8230: 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b     return index;
8240: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8250: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8260: 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   int ColumnCount
8270: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8280: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
8290: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
82a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
82b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
82c0: 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ount(stmt._sqlit
82d0: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d  e_stmt);..    }.
82e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
82f0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
8300: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74  ColumnName(SQLit
8310: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8320: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
8330: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
8340: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8350: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
8360: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
8370: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8380: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8390: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
83a0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
83b0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
83c0: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
83d0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
83e0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
83f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8400: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
8410: 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  mn_name(stmt._sq
8420: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8430: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
8440: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8450: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8460: 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
8470: 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
8480: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8490: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
84a0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
84b0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
84c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
84d0: 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f  lumn_type(stmt._
84e0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
84f0: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
8500: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8510: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
8520: 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
8530: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
8540: 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65   index, out Type
8550: 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
8560: 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ty)..    {..    
8570: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20    int len;..#if 
8580: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8590: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
85a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
85b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
85c0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69  olumn_decltype_i
85d0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
85e0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
85f0: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   out len);..#els
8600: 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d  e..      len = -
8610: 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  1;..      IntPtr
8620: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
8630: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8640: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
8650: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8660: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e  mt, index);..#en
8670: 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69  dif..      nAffi
8680: 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66  nity = ColumnAff
8690: 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65  inity(stmt, inde
86a0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  x);....      if 
86b0: 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p != IntPtr.Zer
86c0: 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f  o) return UTF8To
86d0: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
86e0: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
86f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74     {..        st
8700: 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74  ring[] ar = stmt
8710: 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73  .TypeDefinitions
8720: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  ;..        if (a
8730: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
8740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8750: 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e   if (index < ar.
8760: 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64  Length && ar[ind
8770: 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ex] != null)..  
8780: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8790: 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20   ar[index];..   
87a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
87b0: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d  return String.Em
87c0: 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
87d0: 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e  //switch (nAffin
87e0: 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ity)..        //
87f0: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  {..        //  c
8800: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
8810: 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
8820: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42   //    return "B
8830: 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20  IGINT";..       
8840: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
8850: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
8860: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
8870: 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a  turn "DOUBLE";..
8880: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
8890: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
88a0: 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ob:..        // 
88b0: 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22     return "BLOB"
88c0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64  ;..        //  d
88d0: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
88e0: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54   //    return "T
88f0: 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  EXT";..        /
8900: 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  /}..      }..   
8910: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8920: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
8930: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69  ColumnIndex(SQLi
8940: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8950: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e  , string columnN
8960: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
8970: 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d     int x = Colum
8980: 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d  nCount(stmt);...
8990: 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20  .      for (int 
89a0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b  n = 0; n < x; n+
89b0: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
89c0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
89d0: 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61  Compare(columnNa
89e0: 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73  me, ColumnName(s
89f0: 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43  tmt, n), StringC
8a00: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
8a10: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
8a20: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  0)..          re
8a30: 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d  turn n;..      }
8a40: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
8a50: 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  1;..    }....   
8a60: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8a70: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
8a80: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c  OriginalName(SQL
8a90: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8aa0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
8ab0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8ac0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8ad0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
8ae0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
8af0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
8b00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8b10: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
8b20: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
8b30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8b40: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
8b50: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
8b60: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
8b70: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
8b80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8b90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
8ba0: 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  in_name(stmt._sq
8bb0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8bc0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
8bd0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8be0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8bf0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74  string ColumnDat
8c00: 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65  abaseName(SQLite
8c10: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8c20: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
8c30: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
8c40: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
8c50: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
8c60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8c70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8c80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8c90: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
8ca0: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
8cb0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8cc0: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
8cd0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
8ce0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
8cf0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
8d00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8d10: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
8d20: 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  ase_name(stmt._s
8d30: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
8d40: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
8d50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8d60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8d70: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61   string ColumnTa
8d80: 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  bleName(SQLiteSt
8d90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
8da0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
8db0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8dc0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
8dd0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
8de0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8df0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8e00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8e10: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
8e20: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8e30: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
8e40: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
8e50: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8e60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8e70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8e80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8e90: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
8ea0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8eb0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
8ec0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
8ed0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8ee0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f  override void Co
8ef0: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72  lumnMetaData(str
8f00: 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74  ing dataBase, st
8f10: 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69  ring table, stri
8f20: 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73  ng column, out s
8f30: 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20  tring dataType, 
8f40: 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
8f50: 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20  teSequence, out 
8f60: 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75  bool notNull, ou
8f70: 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65  t bool primaryKe
8f80: 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f  y, out bool auto
8f90: 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20  Increment)..    
8fa0: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
8fb0: 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a 20 20  dataTypePtr;..  
8fc0: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
8fd0: 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e  eqPtr;..      in
8fe0: 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20  t nnotNull;..   
8ff0: 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b     int nprimaryK
9000: 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ey;..      int n
9010: 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20  autoInc;..      
9020: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9030: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74  n;..      int dt
9040: 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Len;..      int 
9050: 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  csLen;....#if !S
9060: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9070: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9080: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9090: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
90a0: 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
90b0: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
90c0: 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
90d0: 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
90e0: 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64  8(column), out d
90f0: 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20  ataTypePtr, out 
9100: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20  collSeqPtr, out 
9110: 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70  nnotNull, out np
9120: 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e  rimaryKey, out n
9130: 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c  autoInc, out dtL
9140: 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d  en, out csLen);.
9150: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74  .#else..      dt
9160: 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  Len = -1;..     
9170: 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a   csLen = -1;....
9180: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9190: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
91a0: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
91b0: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c  mn_metadata(_sql
91c0: 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
91d0: 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
91e0: 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
91f0: 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50  ), out dataTypeP
9200: 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50  tr, out collSeqP
9210: 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c  tr, out nnotNull
9220: 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65  , out nprimaryKe
9230: 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29  y, out nautoInc)
9240: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9250: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
9260: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
9270: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9280: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
9290: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
92a0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
92b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74  UTF8ToString(dat
92c0: 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29  aTypePtr, dtLen)
92d0: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65  ;..      collate
92e0: 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54  Sequence = UTF8T
92f0: 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50  oString(collSeqP
9300: 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20  tr, csLen);.... 
9310: 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28       notNull = (
9320: 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d  nnotNull == 1);.
9330: 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65  .      primaryKe
9340: 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79  y = (nprimaryKey
9350: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61   == 1);..      a
9360: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28  utoIncrement = (
9370: 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d  nautoInc == 1);.
9380: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9390: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
93a0: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
93b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
93c0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
93d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
93e0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
93f0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9400: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9410: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
9420: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9430: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9440: 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c  double(stmt._sql
9450: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
9460: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9470: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9480: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9490: 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
94a0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
94b0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
94c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
94d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
94e0: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
94f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9500: 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33  ride int GetInt3
9510: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
9520: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9530: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
9540: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
9550: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9560: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73  te3_column_int(s
9570: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9580: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
9590: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
95a0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
95b0: 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
95c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
95d0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
95e0: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
95f0: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
9600: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
9610: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
9620: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9630: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9640: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
9650: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9660: 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  dex);..#else..  
9670: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
9680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9690: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74  column_int64_int
96a0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
96b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
96c0: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
96d0: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
96e0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
96f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9700: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
9710: 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  etText(SQLiteSta
9720: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
9730: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
9740: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
9750: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
9760: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
9770: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
9780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9790: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
97a0: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
97b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
97c0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
97d0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
97e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
97f0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
9800: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9810: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
9820: 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
9830: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
9840: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
9850: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9860: 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65  al override Date
9870: 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65  Time GetDateTime
9880: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9890: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
98a0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
98b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
98c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
98d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
98e0: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
98f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9900: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
9910: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9920: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9930: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
9940: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9950: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
9960: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
9970: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9980: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
9990: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
99a0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
99b0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
99c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
99d0: 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  e long GetBytes(
99e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
99f0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
9a00: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
9a10: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
9a20: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
9a30: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
9a40: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
9a50: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9a60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9a70: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
9a80: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9a90: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  dex);....      /
9aa0: 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
9ab0: 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
9ac0: 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
9ad0: 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
9ae0: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
9af0: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
9b00: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
9b10: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
9b20: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
9b30: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
9b40: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
9b50: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
9b60: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
9b70: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
9b80: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
9b90: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
9ba0: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
9bb0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
9bc0: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
9bd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
9be0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
9bf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9c00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
9c10: 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  b(stmt._sqlite_s
9c20: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
9c30: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
9c40: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
9c50: 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
9c60: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
9c70: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
9c80: 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
9c90: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9ca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
9cb0: 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
9cc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
9cd0: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
9ce0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9cf0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
9d00: 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53  GetChars(SQLiteS
9d10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
9d20: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
9d30: 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b  ataOffset, char[
9d40: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
9d50: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
9d60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9d70: 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20  int nlen;..     
9d80: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
9d90: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
9da0: 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65   string str = Ge
9db0: 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
9dc0: 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20  x);..      nlen 
9dd0: 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  = str.Length;...
9de0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
9df0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
9e00: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
9e10: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
9e20: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
9e30: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
9e40: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
9e50: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
9e60: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
9e70: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
9e80: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
9e90: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
9ea0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
9eb0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  d > 0)..        
9ec0: 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61  str.CopyTo(nData
9ed0: 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e  Offset, bDest, n
9ee0: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
9ef0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f  ..      else nCo
9f00: 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  pied = 0;....   
9f10: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
9f20: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
9f30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9f40: 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53  de bool IsNull(S
9f50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9f60: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
9f70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
9f80: 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69  turn (ColumnAffi
9f90: 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
9fa0: 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  ) == TypeAffinit
9fb0: 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d  y.Null);..    }.
9fc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9fd0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67  override int Agg
9fe0: 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50  regateCount(IntP
9ff0: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
a000: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
a010: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a020: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
a030: 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e  regate_count(con
a040: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
a050: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a060: 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
a070: 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e  teFunction(strin
a080: 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69  g strFunction, i
a090: 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e  nt nArgs, bool n
a0a0: 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69  eedCollSeq, SQLi
a0b0: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c  teCallback func,
a0c0: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
a0d0: 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65  funcstep, SQLite
a0e0: 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75  FinalCallback fu
a0f0: 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d  ncfinal)..    {.
a100: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
a110: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
a120: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a130: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
a140: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a150: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
a160: 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
a170: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
a180: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
a190: 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
a1a0: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
a1b0: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
a1c0: 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
a1d0: 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20  ue) ? 1 : 0);.. 
a1e0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
a1f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a200: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
a210: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a220: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
a230: 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
a240: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
a250: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
a260: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
a270: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
a280: 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
a290: 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
a2a0: 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
a2b0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
a2c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a2d0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
a2e0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
a2f0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
a300: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
a310: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
a320: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
a330: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
a340: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
a350: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
a360: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a370: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
a380: 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
a390: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
a3a0: 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
a3b0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
a3c0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
a3d0: 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  al);..#endif..  
a3e0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
a3f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
a400: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
a410: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
a420: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
a430: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a440: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
a450: 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74  oid CreateCollat
a460: 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f  ion(string strCo
a470: 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43  llation, SQLiteC
a480: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53  ollation func, S
a490: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
a4a0: 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20  unc16)..    {.. 
a4b0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
a4c0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
a4d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a4e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
a4f0: 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
a500: 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
a510: 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 2, IntPtr.Zero
a520: 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20  , func16);..    
a530: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
a540: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
a550: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a560: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a570: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
a580: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
a590: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49  Collation), 1, I
a5a0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
a5b0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
a5c0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
a5d0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
a5e0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
a5f0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
a600: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
a610: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a620: 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
a630: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
a640: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
a650: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
a660: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
a670: 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d   s1, string s2).
a680: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
a690: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
a6a0: 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
a6b0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
a6c0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
a6d0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
a6e0: 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
a6f0: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
a700: 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
a710: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
a720: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
a730: 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
a740: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
a750: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
a760: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
a770: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
a780: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
a790: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
a7a0: 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
a7b0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
a7c0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
a7d0: 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
a7e0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
a7f0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
a800: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
a810: 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
a820: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
a830: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
a840: 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
a850: 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
a860: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
a870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
a880: 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
a890: 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20  tBytes(s1);..   
a8a0: 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
a8b0: 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d  r.GetBytes(s2);.
a8c0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
a8d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a8e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
a8f0: 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
a900: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
a910: 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
a920: 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
a930: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
a940: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
a950: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
a960: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a970: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a980: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
a990: 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
a9a0: 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
a9b0: 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
a9c0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
a9d0: 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b  char[] c1, char[
a9e0: 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ] c2)..    {..#i
a9f0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
aa00: 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
aa10: 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
aa20: 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
aa30: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
aa40: 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
aa50: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
aa60: 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
aa70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
aa80: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
aa90: 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
aaa0: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
aab0: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
aac0: 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
aad0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
aae0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
aaf0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
ab00: 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
ab10: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
ab20: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
ab30: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
ab40: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
ab50: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
ab60: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
ab70: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
ab80: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
ab90: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
aba0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
abb0: 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
abc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
abd0: 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
abe0: 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
abf0: 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29  ter.GetBytes(c1)
ac00: 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
ac10: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
ac20: 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (c2);....      r
ac30: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
ac40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ac50: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
ac60: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
ac70: 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
ac80: 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
ac90: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
aca0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
acb0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
acc0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
acd0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ace0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
acf0: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
ad00: 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53  ce GetCollationS
ad10: 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75  equence(SQLiteFu
ad20: 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74  nction func, Int
ad30: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
ad40: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
ad50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ad60: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
ad70: 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c  ce seq = new Col
ad80: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29  lationSequence()
ad90: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
ada0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70  ;..      int typ
adb0: 65 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e  e;..      int en
adc0: 63 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  c;..      IntPtr
add0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
ade0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
adf0: 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71  _context_collseq
ae00: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
ae10: 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74 20  , out type, out 
ae20: 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a  enc, out len);..
ae30: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
ae40: 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20   null) seq.Name 
ae50: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
ae60: 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73  , len);..      s
ae70: 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61  eq.Type = (Colla
ae80: 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70  tionTypeEnum)typ
ae90: 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66  e;..      seq._f
aea0: 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20  unc = func;..   
aeb0: 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20     seq.Encoding 
aec0: 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  = (CollationEnco
aed0: 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d  dingEnum)enc;...
aee0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65  .      return se
aef0: 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  q;..#else..     
af00: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
af10: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
af20: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
af30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
af40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
af50: 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
af60: 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20  Bytes(IntPtr p, 
af70: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
af80: 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
af90: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
afa0: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
afb0: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
afc0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
afd0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
afe0: 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a  ue_bytes(p);....
aff0: 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64        // If no d
b000: 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65  estination buffe
b010: 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69  r, return the si
b020: 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  ze needed...    
b030: 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
b040: 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
b050: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
b060: 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
b070: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
b080: 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
b090: 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
b0a0: 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
b0b0: 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
b0c0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
b0d0: 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
b0e0: 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
b0f0: 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
b100: 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
b110: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
b120: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
b130: 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
b140: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b150: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
b160: 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20  ue_blob(p);.... 
b170: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
b180: 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
b190: 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
b1a0: 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
b1b0: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
b1c0: 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
b1d0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
b1e0: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
b1f0: 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
b200: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
b210: 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
b220: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b230: 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
b240: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f   GetParamValueDo
b250: 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29  uble(IntPtr ptr)
b260: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64  ..    {..      d
b270: 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69  ouble value;..#i
b280: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
b290: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b2a0: 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
b2b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b2c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
b2d0: 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73  uble(ptr);..#els
b2e0: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
b2f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b300: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
b310: 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  e_interop(ptr, o
b320: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
b330: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
b340: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
b350: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b360: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
b370: 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
b380: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
b390: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
b3a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b3b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
b3c0: 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
b3d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b3e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
b3f0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
b400: 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
b410: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
b420: 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  t64 value;..#if 
b430: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b440: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b450: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
b460: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b470: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
b480: 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  4(ptr);..#else..
b490: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
b4a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b4b0: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e  3_value_int64_in
b4c0: 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76  terop(ptr, out v
b4d0: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
b4e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
b4f0: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
b500: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b510: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61  ide string GetPa
b520: 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
b530: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
b540: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
b550: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
b560: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
b570: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
b580: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
b590: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
b5a0: 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  ue_text_interop(
b5b0: 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  ptr, out len), l
b5c0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
b5d0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
b5e0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
b5f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b600: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74  e3_value_text(pt
b610: 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  r), -1);..#endif
b620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b630: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b640: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
b650: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
b660: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
b670: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b680: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b690: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
b6a0: 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20  ue_type(ptr);.. 
b6b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b6c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
b6d0: 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
b6e0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
b6f0: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
b700: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
b710: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b720: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
b730: 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  b(context, value
b740: 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20  , value.Length, 
b750: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
b760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b770: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b780: 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65  oid ReturnDouble
b790: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
b7a0: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
b7b0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
b7c0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
b7d0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
b7e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b7f0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b800: 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
b810: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
b820: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
b830: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b840: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
b850: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
b860: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
b870: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
b880: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b890: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
b8a0: 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e  Error(IntPtr con
b8b0: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
b8c0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
b8d0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b8e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
b8f0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
b900: 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
b910: 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29  ), value.Length)
b920: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b930: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b940: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74  e void ReturnInt
b950: 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  32(IntPtr contex
b960: 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  t, int value).. 
b970: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
b980: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b990: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
b9a0: 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  nt(context, valu
b9b0: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
b9c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b9d0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
b9e0: 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt64(IntPtr cont
b9f0: 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29  ext, long value)
ba00: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
ba10: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
ba20: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55  AMEWORK..      U
ba30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ba40: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
ba50: 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c  t_int64(context,
ba60: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
ba70: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
ba80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ba90: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
baa0: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
bab0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
bac0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
bad0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bae0: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
baf0: 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74  Null(IntPtr cont
bb00: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
bb10: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
bb20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
bb30: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
bb40: 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
bb50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bb60: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
bb70: 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  Text(IntPtr cont
bb80: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
bb90: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
bba0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
bbb0: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  F8(value);..    
bbc0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
bbd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
bbe0: 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
bbf0: 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
bc00: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
bc10: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
bc20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bc30: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49  ernal override I
bc40: 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43  ntPtr AggregateC
bc50: 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f  ontext(IntPtr co
bc60: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
bc70: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
bc80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bc90: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
bca0: 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  e_context(contex
bcb0: 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, 1);..    }...
bcc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
bcd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
bce0: 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
bcf0: 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
bd00: 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20  g by SQLite...  
bd10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
bd20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
bd30: 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
bd40: 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
bd50: 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
bd60: 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
bd70: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
bd80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
bd90: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
bda0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
bdb0: 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
bdc0: 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
bdd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
bde0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
bdf0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
be00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61  hods.sqlite3_ena
be10: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
be20: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
be30: 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
be40: 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
be50: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
be60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
be70: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
be80: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
be90: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
bea0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
beb0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
bec0: 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51    /// Loads a SQ
bed0: 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c  Lite extension l
bee0: 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20  ibrary from the 
bef0: 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20  named file...   
bf00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
bf10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
bf20: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
bf30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
bf40: 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69  me of the dynami
bf50: 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66  c link library f
bf60: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
bf70: 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
bf80: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
bf90: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
bfa0: 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e  name="procName">
bfb0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
bfc0: 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74  me of the export
bfd0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64  ed function used
bfe0: 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
bff0: 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
c000: 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20     /// If null, 
c010: 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c  the default "sql
c020: 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
c030: 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65  nit" will be use
c040: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
c050: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
c060: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c070: 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73   LoadExtension(s
c080: 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20  tring fileName, 
c090: 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29  string procName)
c0a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c0b0: 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
c0c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c0d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
c0e0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
c0f0: 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b  ion("fileName");
c100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
c110: 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  tr pError = IntP
c120: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
c130: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
c140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c150: 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e  byte[] utf8FileN
c160: 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
c170: 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
c180: 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27  (fileName + '\0'
c190: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c1a0: 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e  byte[] utf8ProcN
c1b0: 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
c1c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
c1d0: 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  rocName != null)
c1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c1f0: 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d    utf8ProcName =
c200: 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
c210: 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63  F8.GetBytes(proc
c220: 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d  Name + '\0');...
c230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
c240: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
c250: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c260: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61  hods.sqlite3_loa
c270: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
c290: 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65  ql, utf8FileName
c2a0: 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20  , utf8ProcName, 
c2b0: 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a  ref pError);....
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c2d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c2e0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
c2f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c300: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
c310: 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72  ion(n, UTF8ToStr
c320: 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29  ing(pError, -1))
c330: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
c340: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
c350: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c360: 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72        if (pError
c370: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c3a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c3b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65  hods.sqlite3_fre
c3c0: 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
c3e0: 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
c3f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c400: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c410: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e   }....    /// En
c420: 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
c430: 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  d extended resul
c440: 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
c450: 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
c460: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c470: 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  e void SetExtend
c480: 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
c490: 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
c4a0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
c4b0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
c4c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c4d0: 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
c4e0: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d  d_result_codes(.
c4f0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c  .          _sql,
c500: 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
c510: 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  0));....      if
c520: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c530: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c540: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c550: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c560: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
c570: 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
c580: 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72  e last SQLite er
c590: 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
c5a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c5b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c5c0: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
c5d0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
c5e0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
c5f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
c600: 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
c610: 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
c620: 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
c630: 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  e extended error
c640: 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
c650: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
c660: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74  iteErrorCode Ext
c670: 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28  endedResultCode(
c680: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c690: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
c6a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c6b0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
c6c0: 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
c6d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
c6e0: 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
c6f0: 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
c700: 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
c710: 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
c720: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c730: 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69   LogMessage(SQLi
c740: 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72  teErrorCode iErr
c750: 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65  Code, string zMe
c760: 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssage)..    {.. 
c770: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
c780: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c790: 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54  _log(iErrCode, T
c7a0: 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29  oUTF8(zMessage))
c7b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
c7c0: 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20  INTEROP_CODEC.. 
c7d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c7e0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73  ride void SetPas
c7f0: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73  sword(byte[] pas
c800: 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
c810: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
c820: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
c830: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c840: 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73  s.sqlite3_key(_s
c850: 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  ql, passwordByte
c860: 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  s, passwordBytes
c870: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
c880: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
c890: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
c8a0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c8b0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c8c0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c8d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c8e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c8f0: 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28   ChangePassword(
c900: 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f  byte[] newPasswo
c910: 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
c920: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
c930: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
c940: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c950: 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71  qlite3_rekey(_sq
c960: 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  l, newPasswordBy
c970: 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72  tes, (newPasswor
c980: 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20  dBytes == null) 
c990: 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72  ? 0 : newPasswor
c9a0: 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
c9b0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
c9c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c9d0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
c9e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
c9f0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
ca00: 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
ca10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ca20: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
ca30: 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
ca40: 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
ca50: 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
ca60: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
ca70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ca80: 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
ca90: 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
caa0: 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
cab0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cac0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
cad0: 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
cae0: 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
caf0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
cb00: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
cb10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cb20: 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
cb30: 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
cb40: 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
cb50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cb60: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
cb70: 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
cb80: 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
cb90: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
cba0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
cbb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cbc0: 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
cbd0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
cbe0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
cbf0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
cc00: 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
cc10: 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
cc20: 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
cc30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
cc40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cc50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  ods.sqlite3_roll
cc60: 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  back_hook(_sql, 
cc70: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
cc80: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
cc90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
cca0: 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20  .    /// Allows 
ccb0: 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61  the setting of a
ccc0: 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
ccd0: 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c  k invoked by SQL
cce0: 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20  ite when a..    
ccf0: 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63  /// log event oc
cd00: 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20  curs.  Only one 
cd10: 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20  callback may be 
cd20: 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73  set.  If NULL is
cd30: 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   passed,..    //
cd40: 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61  / the logging ca
cd50: 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69  llback is unregi
cd60: 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  stered...    ///
cd70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
cd80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
cd90: 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c  ="func">The call
cda0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
cdb0: 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e   invoke.</param>
cdc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
cdd0: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73  ns>Returns a res
cde0: 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
cdf0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
ce00: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
ce10: 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
ce20: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
ce30: 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
ce40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ce50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ce60: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
ce70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ce80: 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20  3_config_log(.. 
ce90: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
cea0: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
ceb0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
cec0: 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
ced0: 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
cee0: 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
cef0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
cf60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
cf70: 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
cf80: 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
cf90: 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
cfa0: 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
cfb0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
cfc0: 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
cfd0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
cfe0: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
cff0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
d000: 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
d010: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
d020: 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
d030: 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
d040: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
d050: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
d060: 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
d070: 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
d080: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d090: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d0a0: 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
d0b0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
d0c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d0d0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
d0e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
d0f0: 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
d100: 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
d110: 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
d120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d130: 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
d140: 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
d150: 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
d160: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
d170: 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
d180: 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
d190: 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
d1a0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
d1b0: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
d1c0: 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
d1d0: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
d1e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d1f0: 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
d200: 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
d210: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
d220: 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
d230: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
d240: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
d250: 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
d260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
d270: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
d280: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
d290: 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
d2a0: 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
d2b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d2c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
d2d0: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
d2e0: 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
d2f0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
d300: 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
d310: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d320: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d330: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
d340: 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
d350: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
d360: 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
d370: 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
d380: 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
d390: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
d3a0: 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
d3c0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
d3d0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
d3f0: 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
d400: 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
d410: 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
d420: 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
d430: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
d440: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
d450: 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
d460: 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
d470: 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
d480: 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
d490: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d4a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d4b0: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
d4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4d0: 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
d4e0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
d4f0: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
d500: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
d510: 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
d520: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
d530: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
d540: 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
d550: 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
d560: 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
d570: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
d580: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d590: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
d5a0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d5c0: 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
d5d0: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
d5e0: 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
d5f0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
d600: 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
d610: 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
d620: 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
d630: 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
d640: 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
d650: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
d660: 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
d670: 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
d680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
d690: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d6a0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
d6b0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
d6c0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
d6d0: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
d6e0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
d6f0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
d700: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d710: 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
d720: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d730: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
d740: 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
d750: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
d760: 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
d770: 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
d780: 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
d790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d7a0: 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
d7b0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
d7c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
d7d0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d7e0: 69 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29  ion(ResultCode()
d7f0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d800: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d810: 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d    backupHandle =
d820: 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75   new SQLiteBacku
d830: 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64  pHandle(destHand
d840: 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20  le, backup);..  
d850: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d860: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
d870: 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20  LiteBackup(..   
d880: 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62           this, b
d890: 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73  ackupHandle, des
d8a0: 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
d8b0: 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
d8c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a  ,..            z
d8d0: 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20  SourceName);..  
d8e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
d8f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
d900: 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e  / Copies up to N
d910: 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20   pages from the 
d920: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
d930: 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
d940: 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  on..    /// data
d950: 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
d960: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
d970: 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
d980: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
d990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
d9a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
d9b0: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
d9c0: 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70  bject to use.</p
d9d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
d9e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67  param name="nPag
d9f0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
da00: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
da10: 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69   to copy, negati
da20: 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72  ve to copy all r
da30: 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d  emaining pages..
da40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
da50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
da60: 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d  m name="retry">.
da70: 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20  .    /// Set to 
da80: 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72  true if the oper
da90: 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ation needs to b
daa0: 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f  e retried due to
dab0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
dac0: 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65  // locking issue
dad0: 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65  s; otherwise, se
dae0: 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20  t to false...   
daf0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
db00: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
db10: 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69  ..    /// True i
db20: 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65  f there are more
db30: 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70   pages to be cop
db40: 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72  ied, false other
db50: 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  wise...    /// <
db60: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
db70: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
db80: 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70   bool StepBackup
db90: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
dba0: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d  eBackup backup,.
dbb0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61  .        int nPa
dbc0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74  ge,..        out
dbd0: 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20   bool retry..   
dbe0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
dbf0: 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66         retry = f
dc00: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
dc10: 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
dc20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
dc30: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
dc40: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
dc50: 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
dc60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
dc70: 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
dc80: 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
dc90: 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
dca0: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
dcb0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
dcc0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
dcd0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
dce0: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
dd00: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
dd10: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
dd20: 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
dd30: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
dd40: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
dd50: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
dd60: 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
dd70: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
dd80: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
dd90: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
dda0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
ddb0: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
ddc0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
ddd0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
dde0: 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
ddf0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
de00: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
de10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
de20: 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
de30: 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65  handlePtr, nPage
de40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b  );..        back
de50: 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d  up._stepResult =
de60: 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76   n; /* NOTE: Sav
de70: 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e  e for use by Fin
de80: 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d  ishBackup. */...
de90: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
dea0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
deb0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b  e.Ok)..        {
dec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
ded0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
dee0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
def0: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
df00: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
df10: 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  y)..        {.. 
df20: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
df30: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
df40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
df50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
df60: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
df70: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
df80: 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20  Code.Locked)..  
df90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dfa0: 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75       retry = tru
dfb0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
dfc0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
dfd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
dfe0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
dff0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
e000: 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  one)..        {.
e010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
e020: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
e030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
e040: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
e050: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e060: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e070: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
e080: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
e090: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
e0a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e0b0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
e0c0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
e0d0: 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
e0e0: 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f  to be copied fro
e0f0: 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20  m the source..  
e100: 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74    /// database t
e110: 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
e120: 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  n database assoc
e130: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
e140: 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f  pecified..    //
e150: 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  / backup object.
e160: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
e170: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
e180: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
e190: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
e1a0: 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ject to check.</
e1b0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
e1c0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d  <returns>The num
e1d0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d  ber of pages rem
e1e0: 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70  aining to be cop
e1f0: 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ied.</returns>..
e200: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e210: 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e  rride int Remain
e220: 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ingBackup(..    
e230: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
e240: 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
e250: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
e260: 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
e270: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e280: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
e290: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
e2a0: 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
e2b0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e2c0: 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
e2d0: 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
e2e0: 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
e2f0: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
e300: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
e310: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e320: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
e330: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e350: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
e360: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
e370: 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
e380: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
e390: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
e3a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
e3b0: 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
e3c0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
e3d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
e3e0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
e3f0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
e400: 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
e410: 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
e420: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
e430: 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
e440: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
e450: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e460: 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
e470: 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65  remaining(handle
e480: 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
e490: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
e4a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
e4b0: 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
e4c0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
e4d0: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
e4e0: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
e4f0: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
e500: 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
e510: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
e520: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e530: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e540: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
e550: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
e560: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
e570: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
e580: 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
e590: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
e5a0: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
e5b0: 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
e5c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e5d0: 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75  ride int PageCou
e5e0: 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ntBackup(..     
e5f0: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
e600: 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
e610: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e620: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
e630: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e640: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
e650: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
e660: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
e670: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
e680: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
e690: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
e6a0: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
e6b0: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
e6c0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
e6d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e6e0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
e6f0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
e710: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
e720: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
e730: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
e740: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
e750: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
e760: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
e770: 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
e780: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
e790: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e7a0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e7b0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e7c0: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
e7d0: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
e7e0: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
e7f0: 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
e800: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
e810: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e820: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70  sqlite3_backup_p
e830: 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50  agecount(handleP
e840: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
e850: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e860: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f  ..    /// Destro
e870: 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62  ys the backup ob
e880: 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61  ject, rolling ba
e890: 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68  ck any backup th
e8a0: 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20  at may be in..  
e8b0: 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a    /// progess...
e8c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e8d0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
e8e0: 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
e8f0: 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
e900: 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f  ct to destroy.</
e910: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
e920: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
e930: 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28  id FinishBackup(
e940: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e950: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
e960: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
e970: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
e980: 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
e990: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e9a0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
e9b0: 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
e9c0: 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
e9d0: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
e9e0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
e9f0: 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
ea00: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
ea10: 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
ea20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
ea30: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
ea40: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
ea50: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
ea60: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
ea70: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
ea80: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
ea90: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
eaa0: 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
eab0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
eac0: 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
ead0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
eae0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
eaf0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
eb00: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
eb30: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
eb40: 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
eb50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
eb60: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
eb70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
eb80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
eb90: 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65  up_finish(handle
eba0: 50 74 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 68  Ptr);..        h
ebb0: 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41  andle.SetHandleA
ebc0: 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 20  sInvalid();.... 
ebd0: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d         if ((n !=
ebe0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ebf0: 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61  .Ok) && (n != ba
ec00: 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
ec10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ec20: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ec30: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
ec40: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
ec50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ecc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
ecd0: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
ece0: 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69  ines if the SQLi
ecf0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
ed00: 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
ed10: 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ized for the..  
ed20: 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72    /// current pr
ed30: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
ed40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ed50: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
ed60: 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e     /// A boolean
ed70: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
ed80: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53  her or not the S
ed90: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
eda0: 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ry has been..   
edb0: 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
edc0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
edd0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
ede0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
edf0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ee00: 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74  ride bool IsInit
ee10: 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
ee20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ee30: 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c   StaticIsInitial
ee40: 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ized();..    }..
ee50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ee60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
ee70: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
ee80: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
ee90: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
eea0: 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
eeb0: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
eec0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
eed0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
eee0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
eef0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
ef00: 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
ef10: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
ef20: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
ef30: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
ef40: 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
ef50: 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
ef60: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
ef70: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
ef80: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
ef90: 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69  tatic bool Stati
efa0: 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
efb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
efc0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
efd0: 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20  BUGFIX: Prevent 
efe0: 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65 72  races with other
eff0: 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68 69   threads for thi
f000: 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20  s entire block, 
f010: 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  due..        // 
f020: 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 74          to the t
f030: 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e  ry/finally seman
f040: 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65  tics.  See ticke
f050: 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d  t [72905c9a77]..
f060: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
f070: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
f080: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  oot)..        {.
f090: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
f0a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
f0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
f0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
f0d0: 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 73  NOTE: Save the s
f0e0: 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67  tate of the logg
f0f0: 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68  ing class and th
f100: 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20  en restore it.. 
f110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
f120: 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72 65      after we are
f130: 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c   done to avoid l
f140: 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20  ogging too many 
f150: 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20  false errors... 
f160: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f170: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f180: 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53  savedEnabled = S
f190: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
f1a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ;..            S
f1b0: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
f1c0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
f1d0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
f1e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 65 6e            {..#en
f1f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
f200: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
f210: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
f220: 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61  : This method [a
f230: 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20  b]uses the fact 
f240: 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
f250: 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
f260: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
f270: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
f280: 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e  ERROR for any un
f290: 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74  known configurat
f2a0: 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ion option..    
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
f2c0: 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68       *unless* th
f2d0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
f2e0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
f2f0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a  n initialized...
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f310: 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74  //       In that
f320: 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c   case it will al
f330: 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49  ways return SQLI
f340: 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20  TE_MISUSE...    
f350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f380: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
f390: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f3a0: 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20  _config_none(.. 
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
f3d0: 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
f3e0: 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20  NFIG_NONE);.... 
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f400: 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c  eturn (rc == SQL
f410: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73  iteErrorCode.Mis
f420: 75 73 65 29 3b 0d 0a 23 69 66 20 21 50 4c 41 54  use);..#if !PLAT
f430: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
f440: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
f450: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f460: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
f470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f480: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f490: 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61  Log.Enabled = sa
f4a0: 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  vedEnabled;..   
f4b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
f4c0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
f4d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
f4e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f4f0: 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69  // Helper functi
f500: 6f 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20 61  on to retrieve a
f510: 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20   column of data 
f520: 66 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73  from an active s
f530: 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f  tatement...    /
f540: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f550: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
f560: 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74  me="stmt">The st
f570: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74  atement being st
f580: 65 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f  ep()'d through</
f590: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
f5a0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
f5b0: 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69  ex">The column i
f5c0: 6e 64 65 78 20 74 6f 20 72 65 74 72 69 65 76 65  ndex to retrieve
f5d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
f5e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
f5f0: 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20  yp">The type of 
f600: 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69  data contained i
f610: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49  n the column.  I
f620: 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c  f Uninitialized,
f630: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77   this function w
f640: 69 6c 6c 20 72 65 74 72 69 65 76 65 20 74 68 65  ill retrieve the
f650: 20 64 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d   datatype inform
f660: 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ation.</param>..
f670: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f680: 3e 52 65 74 75 72 6e 73 20 74 68 65 20 64 61 74  >Returns the dat
f690: 61 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  a in the column<
f6a0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
f6b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f6c0: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
f6d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f6e0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
f6f0: 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70  , SQLiteType typ
f700: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f710: 69 66 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c  if (IsNull(stmt,
f720: 20 69 6e 64 65 78 29 29 20 72 65 74 75 72 6e 20   index)) return 
f730: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
f740: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
f750: 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69  y aff = typ.Affi
f760: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 54 79 70  nity;..      Typ
f770: 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  e t = null;.... 
f780: 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
f790: 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65  e != DbType.Obje
f7a0: 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ct)..      {..  
f7b0: 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65        t = SQLite
f7c0: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
f7d0: 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a  peToType(typ);..
f7e0: 20 20 20 20 20 20 20 20 61 66 66 20 3d 20 54 79          aff = Ty
f7f0: 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b  peToAffinity(t);
f800: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
f810: 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d     switch (aff).
f820: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
f830: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
f840: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
f850: 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
f860: 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
f870: 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79   && typ.Affinity
f880: 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
f890: 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  .Text)..        
f8a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
f8b0: 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74  uid(GetText(stmt
f8c0: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20  , index));....  
f8d0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
f8e0: 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74  (int)GetBytes(st
f8f0: 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75  mt, index, 0, nu
f900: 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  ll, 0, 0);..    
f910: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
f920: 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20   new byte[n];.. 
f930: 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
f940: 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
f950: 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20  , b, 0, n);.... 
f960: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
f970: 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
f980: 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29  Guid && n == 16)
f990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
f9a0: 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29  turn new Guid(b)
f9b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
f9c0: 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20  eturn b;..      
f9d0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
f9e0: 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20  ity.DateTime:.. 
f9f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fa00: 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74  GetDateTime(stmt
fa10: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
fa20: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
fa30: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
fa40: 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
fa50: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
fa60: 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
fa70: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
fa80: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
fa90: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
faa0: 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
fab0: 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
fac0: 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
fad0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
fae0: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
faf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
fb00: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
fb10: 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  n GetInt64(stmt,
fb20: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
fb30: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
fb40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
fb50: 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
fb60: 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
fb70: 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
fb80: 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ..        defaul
fb90: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  t:..          re
fba0: 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
fbb0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
fbc0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
fbd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fbe0: 69 64 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f  ide int GetCurso
fbf0: 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65  rForTable(SQLite
fc00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
fc10: 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74  int db, int root
fc20: 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  Page)..    {..#i
fc30: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
fc40: 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RD..      return
fc50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fc60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
fc70: 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f  le_cursor_intero
fc80: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
fc90: 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67  tmt, db, rootPag
fca0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
fcb0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65    return -1;..#e
fcc0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
fcd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
fce0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77  ride long GetRow
fcf0: 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69  IdForCursor(SQLi
fd00: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
fd10: 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20  , int cursor).. 
fd20: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
fd30: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
fd40: 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20    long rowid;.. 
fd50: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fd60: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
fd70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
fd80: 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
fd90: 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
fda0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
fdb0: 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69 64 29  rsor, out rowid)
fdc0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
fdd0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
fde0: 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
fdf0: 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
fe00: 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
fe10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
fe20: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
fe30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fe40: 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
fe50: 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
fe60: 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
fe70: 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
fe80: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
fe90: 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f  lumn, out int so
fea0: 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20  rtMode, out int 
feb0: 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72  onError, out str
fec0: 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
fed0: 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
fee0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
fef0: 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
ff00: 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20 69  r coll;..      i
ff10: 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20  nt colllen;..   
ff20: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ff30: 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  de rc;....      
ff40: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
ff50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ff60: 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
ff70: 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
ff80: 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
ff90: 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
ffa0: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
ffb0: 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20  , out sortMode, 
ffc0: 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  out onError, out
ffd0: 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c   coll, out colll
ffe0: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
fff0: 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
10000 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
10010 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
10020 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(rc, null);..
10030 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
10040 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
10050 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
10060 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
10070 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
10080 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
10090 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
100a0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
100b0 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
100c0 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
100d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
100e0 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
100f0 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f  rCode FileContro
10100 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
10110 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
10120 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
10130 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
10140 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10150 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
10160 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
10170 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
10180 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
10190 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
101a0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
101b0 0d 0a                                            ..