System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bec86b2fccf541ff4a4c010088026ee4f4075c90:


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 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
22b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
22c0: 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73 74  ide void Open(st
22d0: 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65  ring strFilename
22e0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
22f0: 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69  onFlags connecti
2300: 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f  onFlags, SQLiteO
2310: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65  penFlagsEnum ope
2320: 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50  nFlags, int maxP
2330: 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73  oolSize, bool us
2340: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20  ePool)..    {.. 
2350: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d       if (_sql !=
2360: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a   null) return;..
2370: 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
2380: 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20   = usePool;..   
2390: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73     _fileName = s
23a0: 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20  trFilename;.... 
23b0: 20 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c       if (usePool
23c0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
23d0: 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74      _sql = SQLit
23e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
23f0: 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61  Remove(strFilena
2400: 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  me, maxPoolSize,
2410: 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   out _poolVersio
2420: 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  n);....#if !NET_
2430: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
2440: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
2450: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2460: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
2470: 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f  ormat("Open (Poo
2480: 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20  l): {0}", (_sql 
2490: 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e  != null) ? _sql.
24a0: 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e  ToString() : "<n
24b0: 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66  ull>"));..#endif
24c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
24d0: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
24e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ull)..      {.. 
24f0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
2500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2510: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
2520: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
2530: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
2540: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
2550: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
2560: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
2570: 0a 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74  .          IntPt
2580: 72 20 64 62 3b 0d 0a 20 20 20 20 20 20 20 20 20  r db;..         
2590: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
25a0: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
25b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
25c0: 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e         if ((conn
25d0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51  ectionFlags & SQ
25e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
25f0: 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46  ags.NoExtensionF
2600: 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c  unctions) != SQL
2610: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2620: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
2630: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
2640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2650: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
2660: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2670: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
2680: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
2690: 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20  me), openFlags, 
26a0: 6f 75 74 20 64 62 29 3b 0d 0a 20 20 20 20 20 20  out db);..      
26b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
26c0: 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20   else..#endif.. 
26d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26e0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
26f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2700: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
2710: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
2720: 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20 6f 70 65  me), out db, ope
2730: 6e 46 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a  nFlags, IntPtr.Z
2740: 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ero);..         
2750: 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43   }....#if !NET_C
2760: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2770: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2780: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
2790: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
27a0: 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30  Format("Open: {0
27b0: 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69  }", db));..#endi
27c0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  f....          i
27d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
27e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
27f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2800: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
2810: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
2820: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
2830: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 29  ectionHandle(db)
2840: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2850: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c        lock (_sql
2860: 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72  ) { /* HACK: For
2870: 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b  ce the SyncBlock
2880: 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22   to be "created"
2890: 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20   now. */ }..    
28a0: 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69    }..      // Bi
28b0: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  nd functions to 
28c0: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  this connection.
28d0: 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75    If any previou
28e0: 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74  s functions of t
28f0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20  he same name..  
2900: 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65      // were alre
2910: 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20  ady bound, then 
2920: 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73  the new bindings
2930: 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64   replace the old
2940: 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e 63 74 69  ...      _functi
2950: 6f 6e 73 41 72 72 61 79 20 3d 20 53 51 4c 69 74  onsArray = SQLit
2960: 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75  eFunction.BindFu
2970: 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f  nctions(this, co
2980: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 3b 0d  nnectionFlags);.
2990: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
29a0: 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e  t(0);..      GC.
29b0: 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b  KeepAlive(_sql);
29c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
29d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
29e0: 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28   void ClearPool(
29f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2a00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2a10: 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f  Pool.ClearPool(_
2a20: 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
2a30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2a40: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
2a50: 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  ountPool()..    
2a60: 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  {..        Dicti
2a70: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
2a80: 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c  t> counts = null
2a90: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f  ;..        int o
2aa0: 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  penCount = 0;.. 
2ab0: 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65         int close
2ac0: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
2ad0: 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75      int totalCou
2ae0: 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  nt = 0;....     
2af0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2b00: 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74  ionPool.GetCount
2b10: 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  s(_fileName,..  
2b20: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f            ref co
2b30: 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f  unts, ref openCo
2b40: 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f  unt, ref closeCo
2b50: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
2b60: 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74    ref totalCount
2b70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
2b80: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
2b90: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2ba0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2bb0: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
2bc0: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
2bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
2be0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
2bf0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2c00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
2c10: 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c  usy_timeout(_sql
2c20: 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a  , nTimeoutMS);..
2c30: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
2c40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
2c50: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
2c60: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
2c70: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
2c80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2c90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2ca0: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
2cb0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
2cc0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
2cd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
2ce0: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
2cf0: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
2d00: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
2d10: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
2d20: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
2d30: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d  ..      uint tim
2d40: 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74  eout = (uint)(st
2d50: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d  mt._command._com
2d60: 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30  mandTimeout * 10
2d70: 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68  00);....      wh
2d80: 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20  ile (true)..    
2d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d    {..        n =
2da0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2db0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65  hods.sqlite3_ste
2dc0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
2dd0: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
2de0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
2df0: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72  ErrorCode.Row) r
2e00: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2e10: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
2e20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
2e30: 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ne) return false
2e40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2e50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
2e60: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
2e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e90: 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
2ea0: 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75  // An error occu
2eb0: 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f  rred, attempt to
2ec0: 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74 65   reset the state
2ed0: 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65  ment.  If the re
2ee0: 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75  set worked becau
2ef0: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..        
2f00: 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20    // schema has 
2f10: 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20  changed, re-try 
2f20: 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20  the step again. 
2f30: 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f   If it errored o
2f40: 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20 64  ur because the d
2f50: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20  atabase..       
2f60: 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c     // is locked,
2f70: 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79   then keep retry
2f80: 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f  ing until the co
2f90: 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63  mmand timeout oc
2fa0: 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  curs...         
2fb0: 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29   r = Reset(stmt)
2fc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
2fd0: 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (r == SQLiteEr
2fe0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
2ff0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
3000: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
3010: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
3020: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
3030: 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72 20      else if ((r 
3040: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
3050: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d  de.Locked || r =
3060: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3070: 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e  e.Busy) && stmt.
3080: 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c  _command != null
3090: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
30b0: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
30c0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
30d0: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
30e0: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
30f0: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
3100: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
3110: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
3120: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
3130: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
3140: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
3150: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
3160: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
3170: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
3180: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
3190: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
31a0: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
31b0: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a  ick > timeout)..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
31e0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
31f0: 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73  eption(r, GetLas
3200: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
3210: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3220: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
3230: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3240: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
3250: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
3260: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
3270: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
3280: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
3290: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
32a0: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
32b0: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
32c0: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
32d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
32e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3300: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3310: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
3320: 43 6f 64 65 20 52 65 73 65 74 28 53 51 4c 69 74  Code Reset(SQLit
3330: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
3340: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
3350: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
3360: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
3370: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
3380: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
3390: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33a0: 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73  _reset_interop(s
33b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
33c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
33d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
33e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33f0: 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c  _reset(stmt._sql
3400: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64  ite_stmt);..#end
3410: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  if....      // I
3420: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
3430: 6e 67 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65  nged, try and re
3440: 2d 70 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20  -prepare it..   
3450: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
3460: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
3470: 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ma)..      {..  
3480: 20 20 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74        // Recreat
3490: 65 20 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d  e a dummy statem
34a0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ent..        str
34b0: 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20 20 20 20  ing str;..      
34c0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53    using (SQLiteS
34d0: 74 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50  tatement tmp = P
34e0: 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d  repare(null, stm
34f0: 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c  t._sqlStatement,
3500: 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74   null, (uint)(st
3510: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d  mt._command._com
3520: 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30  mandTimeout * 10
3530: 30 30 29 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a  00), out str))..
3540: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3550: 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65       // Finalize
3560: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 73 74   the existing st
3570: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
3580: 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f     stmt._sqlite_
3590: 73 74 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d  stmt.Dispose();.
35a0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65  .          // Re
35b0: 61 73 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61  assign a new sta
35c0: 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74  tement pointer t
35d0: 6f 20 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d  o the old statem
35e0: 65 6e 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68  ent and clear th
35f0: 65 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d  e temporary one.
3600: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
3610: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74  _sqlite_stmt = t
3620: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mp._sqlite_stmt;
3630: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e  ..          tmp.
3640: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e  _sqlite_stmt = n
3650: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
3660: 20 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72    // Reapply par
3670: 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20  ameters..       
3680: 20 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61     stmt.BindPara
3690: 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  meters();..     
36a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
36b0: 74 75 72 6e 20 28 53 51 4c 69 74 65 45 72 72 6f  turn (SQLiteErro
36c0: 72 43 6f 64 65 29 28 2d 31 29 3b 20 2f 2f 20 52  rCode)(-1); // R
36d0: 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74  eset was OK, wit
36e0: 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d  h schema change.
36f0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
3700: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
3710: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
3720: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
3730: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
3740: 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  y)..        retu
3750: 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  rn n;....      i
3760: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
3770: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
3780: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
3790: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
37a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
37b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
37c0: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
37d0: 64 65 2e 4f 6b 3b 20 2f 2f 20 57 65 20 72 65 73  de.Ok; // We res
37e0: 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61  et OK, no schema
37f0: 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d   changes..    }.
3800: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3810: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
3820: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a  GetLastError()..
3830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
3840: 75 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e 47  urn SQLiteBase.G
3850: 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  etLastError(_sql
3860: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  , _sql);..    }.
3870: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3880: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53  override SQLiteS
3890: 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65  tatement Prepare
38a0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
38b0: 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74  n cnn, string st
38c0: 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74  rSql, SQLiteStat
38d0: 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20  ement previous, 
38e0: 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20  uint timeoutMS, 
38f0: 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65  out string strRe
3900: 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  main)..    {..  
3910: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
3920: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
3930: 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d  rSql))..      {.
3940: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
3950: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51       // NOTE: SQ
3960: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
3970: 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70  pport the concep
3980: 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63  t of separate sc
3990: 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  hemas..        /
39a0: 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64  /       in one d
39b0: 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f  atabase; therefo
39c0: 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62  re, remove the b
39d0: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d  ase schema name.
39e0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
39f0: 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68    used to smooth
3a00: 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74   integration wit
3a10: 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20  h the base .NET 
3a20: 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20  Framework..     
3a30: 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61     //       data
3a40: 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20   classes...     
3a50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73     //..        s
3a60: 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61  tring baseSchema
3a70: 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e  Name = (cnn != n
3a80: 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65  ull) ? cnn._base
3a90: 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c  SchemaName : nul
3aa0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
3ab0: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
3ac0: 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65  OrEmpty(baseSche
3ad0: 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  maName))..      
3ae0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
3af0: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
3b00: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
3b10: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
3b20: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
3b30: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
3b40: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
3b50: 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65    "[{0}].", base
3b60: 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72  SchemaName), Str
3b70: 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20  ing.Empty);.... 
3b80: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
3b90: 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65  = strSql.Replace
3ba0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3bb0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43   String.Format(C
3bc0: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
3bd0: 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  iantCulture,..  
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
3bf0: 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61  .", baseSchemaNa
3c00: 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  me), String.Empt
3c10: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
3c20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3c30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3c40: 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a  nFlags flags =..
3c50: 20 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21            (cnn !
3c60: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c  = null) ? cnn.Fl
3c70: 61 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e  ags : SQLiteConn
3c80: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61  ectionFlags.Defa
3c90: 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ult;....#if !PLA
3ca0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
3cb0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 69 66  MEWORK..      if
3cc0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
3cd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3ce0: 2e 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20  .LogPrepare) == 
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 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
3d20: 20 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71        if ((strSq
3d30: 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73  l == null) || (s
3d40: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20  trSql.Length == 
3d50: 30 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72  0) || (strSql.Tr
3d60: 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  im().Length == 0
3d70: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3d80: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
3d90: 65 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e  essage("Preparin
3da0: 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e  g {<nothing>}...
3db0: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ");..          e
3dc0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3dd0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
3de0: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
3df0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
3e00: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
3e10: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
3e20: 74 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67  ture, "Preparing
3e30: 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74   {{{0}}}...", st
3e40: 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d  rSql));..      }
3e50: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
3e60: 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20    IntPtr stmt = 
3e70: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
3e80: 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
3e90: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
3ea0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
3eb0: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
3ec0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c  rrorCode n = SQL
3ed0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
3ee0: 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ema;..      int 
3ef0: 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20  retries = 0;..  
3f00: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
3f10: 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a  oUTF8(strSql);..
3f20: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
3f30: 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  edefs = null;.. 
3f40: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
3f50: 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b  ment cmd = null;
3f60: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
3f70: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
3f80: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
3f90: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
3fa0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
3fb0: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
3fc0: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
3fd0: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
3fe0: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
3ff0: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
4000: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
4010: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
4020: 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  t();..      SQLi
4030: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
4040: 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  e statementHandl
4050: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
4060: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
4070: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e         while ((n
4080: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4090: 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20  ode.Schema || n 
40a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
40b0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
40c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
40d0: 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69  e.Busy) && retri
40e0: 65 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20  es < 3)..       
40f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72   {..          tr
4100: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  y..          {..
4110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
4120: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
4130: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4140: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
4150: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
4160: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
4170: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  /..          {..
4180: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4190: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
41a0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
41b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
41c0: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
41d0: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
41e0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
41f0: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f  stmt, out ptr, o
4200: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
4210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
4220: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4230: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
4240: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
4250: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
4260: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
4270: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4280: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
4290: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
42a0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
42b0: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
42c0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
42d0: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
42e0: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
42f0: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
4300: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
4310: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
4320: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
4330: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
4340: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
4350: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
4360: 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48        statementH
4370: 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
4380: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
4390: 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a  e(_sql, stmt);..
43a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
43b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
43c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
43d0: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
43e0: 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b         retries++
43f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
4400: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
4410: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
4420: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
4430: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4440: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
4450: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
4460: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
4470: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
4480: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
4490: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
44a0: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
44b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
44c0: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
44d0: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
44e0: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
44f0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
4500: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
4510: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
4530: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
4540: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
4550: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
4560: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
4570: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
4580: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
4590: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
45a0: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
45c0: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
45d0: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
45e0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
45f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4600: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
4610: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
4620: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
4630: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
4640: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
4650: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4660: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
4670: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4690: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
46c0: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
46d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
46e0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
46f0: 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35    }..#if (NET_35
4700: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
4710: 54 5f 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f  T_45) && !PLATFO
4720: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4730: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
4740: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
4750: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
4760: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
4770: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
4780: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
4790: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
47a0: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
47b0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
47c0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
47d0: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
47e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
47f0: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
4800: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
4810: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
4820: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
4830: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4860: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
4870: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
4880: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
4890: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
48a0: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
48b0: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
48c0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
48d0: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
48e0: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
48f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4900: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
4910: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4920: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
4930: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
4940: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4950: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
4960: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
4970: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
49a0: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
49b0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
49c0: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
49d0: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
49e0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
49f0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4a00: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a30: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
4a60: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
4a70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a80: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
4a90: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
4aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ab0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4ac0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4ad0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4ae0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
4af0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
4b00: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
4b10: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
4b20: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
4b30: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
4b40: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
4b50: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
4b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4b70: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4b90: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
4ba0: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
4bb0: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
4bc0: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
4bd0: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
4be0: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
4bf0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
4c00: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
4c10: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
4c20: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
4c30: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4c50: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
4c60: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
4c70: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
4c80: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
4c90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4ca0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
4cb0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
4cc0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
4cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
4cf0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
4d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d10: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
4d20: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
4d30: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
4d40: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
4d50: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
4d60: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
4d70: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
4d80: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
4d90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
4dc0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
4dd0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
4de0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
4df0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
4e00: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
4e10: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
4e20: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
4e30: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
4e40: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
4e50: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63  andle != null) c
4e60: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  md = new SQLiteS
4e70: 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66  tatement(this, f
4e80: 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48  lags, statementH
4e90: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75  andle, strSql.Su
4ea0: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
4eb0: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
4ec0: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
4ed0: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
4ee0: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
4ef0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
4f00: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
4f10: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
4f20: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
4f30: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  }..    }....#if 
4f40: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
4f50: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
4f60: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
4f70: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
4f80: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
4f90: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
4fa0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
4fb0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
4fc0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
4fd0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
4fe0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
4ff0: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
5000: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
5010: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
5020: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
5030: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
5040: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5050: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
5060: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
5070: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
5080: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
5090: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
50a0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
50b0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
50c0: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
50d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
50e0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
50f0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
5100: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
5110: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
5120: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
5130: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5140: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5150: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5160: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
5170: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
5180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
5190: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
51a0: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
51b0: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
51c0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
51d0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
51e0: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
51f0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
5200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
5210: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
5220: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
5230: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
5240: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
5250: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
5260: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
5270: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
5280: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
5290: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
52a0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
52b0: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
52c0: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
52d0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
52e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
52f0: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
5300: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
5310: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5320: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
5330: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
5340: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
5350: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5360: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5370: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
5380: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
5390: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
53a0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
53b0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
53c0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
53d0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
53e0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
5400: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
5410: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
5420: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
5430: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
5440: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
5450: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
5460: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
5470: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
5480: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
5490: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
54a0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
54b0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
54c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
54d0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
54e0: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
54f0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5500: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
5510: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5520: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
5530: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5540: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
5550: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5560: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5570: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5580: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5590: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
55a0: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
55b0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
55c0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
55d0: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
55e0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
55f0: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
5600: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
5610: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
5620: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
5630: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
5640: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
5650: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
5660: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
5670: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
5680: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5690: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
56a0: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
56b0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
56c0: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
56d0: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
56e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
56f0: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
5700: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
5710: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
5720: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
5730: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
5740: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
5750: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
5760: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
5770: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
5780: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
5790: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
57a0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
57b0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
57c0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
57d0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
57e0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
57f0: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
5800: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
5810: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
5820: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
5830: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
5840: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
5850: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
5860: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5870: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5880: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5890: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
58a0: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
58b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
58c0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
58d0: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
58e0: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
58f0: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
5900: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
5910: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
5920: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
5930: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5940: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
5950: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
5960: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5970: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5980: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5990: 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  ex, double value
59a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
59b0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
59c0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
59d0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
59e0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
59f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
5a00: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
5a10: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
5a20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5a30: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
5a40: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5a50: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
5a60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5a70: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
5a80: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
5a90: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
5aa0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
5ab0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
5ac0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5ad0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
5ae0: 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e  ouble(handle, in
5af0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
5b00: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  lse..        SQL
5b10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
5b20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5b30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
5b40: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
5b50: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5b60: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
5b70: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
5b80: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5b90: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5ba0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5bb0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5bc0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
5bd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5be0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
5bf0: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
5c00: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
5c10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5c20: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
5c30: 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29  ndex, int value)
5c40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5c50: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5c60: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5c70: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5c80: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5c90: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5ca0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5cb0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5cc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5cd0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5ce0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5cf0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
5d00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5d10: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
5d20: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5d30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
5d40: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
5d50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5d60: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5d70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5d80: 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65  _bind_int(handle
5d90: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5da0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5db0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5dc0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5dd0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5de0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5df0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
5e00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5e10: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
5e20: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
5e30: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5e40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5e50: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5e60: 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d  ex, uint value).
5e70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5e80: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
5e90: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
5ea0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5eb0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
5ec0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5ed0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
5ee0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5ef0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5f00: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
5f10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5f20: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
5f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f40: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
5f50: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
5f60: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
5f70: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
5f80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5f90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5fa0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5fb0: 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65  bind_uint(handle
5fc0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5fd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5fe0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5ff0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
6000: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6010: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6020: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6030: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6040: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
6050: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
6060: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6080: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6090: 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  x, long value)..
60a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
60b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
60c0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
60d0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
60e0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
60f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6100: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6110: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6120: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6130: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6140: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6150: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6160: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6170: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6180: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6190: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
61a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
61b0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
61c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
61d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
61e0: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
61f0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
6200: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
6210: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6220: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6230: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
6240: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
6250: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
6260: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
6270: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
6280: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6290: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
62a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
62b0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
62c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
62d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
62e0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
62f0: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
6300: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6310: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6320: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
6330: 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  , ulong value)..
6340: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6350: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6360: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6370: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6380: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6390: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
63a0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
63b0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
63c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
63d0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
63e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
63f0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6410: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6420: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6430: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6440: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6450: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6460: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6470: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
6480: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
6490: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
64a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
64b0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
64c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
64d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
64e0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
64f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
6500: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
6510: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
6520: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
6530: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
6540: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6550: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6560: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6570: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6580: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54  ride void Bind_T
6590: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
65a0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
65b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
65c0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
65d0: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
65e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
65f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
6600: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
6610: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6620: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6630: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6640: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
6650: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6660: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6670: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6680: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6690: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
66a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
66b0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
66c0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
66d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
66e0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
66f0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
6700: 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66  8(value);....#if
6710: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6720: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6730: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6740: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6750: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6760: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6770: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6780: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6790: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
67a0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
67b0: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  , b);..        }
67c0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
67d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
67e0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
67f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6800: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
6810: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
6820: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
6830: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
6840: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
6850: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6860: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
6870: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
6880: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
6890: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
68a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
68b0: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
68c0: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
68d0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
68e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
68f0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
6900: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
6910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6920: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6930: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6940: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6950: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6960: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6970: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6980: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6990: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
69a0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
69b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
69c0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
69d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
69e0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
69f0: 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20  , index, dt);.. 
6a00: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
6a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
6a20: 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  ch (_datetimeFor
6a30: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
6a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
6a50: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
6a60: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a90: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
6aa0: 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66  dt.Ticks;....#if
6ab0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6ac0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6af0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b00: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6b10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6b20: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
6b60: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
6b70: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6bb0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6bc0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6bd0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6be0: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
6bf0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6c00: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6c10: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6c20: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6c30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6c40: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
6c50: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
6c60: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
6c70: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
6c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6c90: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
6ca0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6cb0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
6cc0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
6cd0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
6ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6cf0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
6d20: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
6d30: 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20  ts.JulianDay:.. 
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d60: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
6d70: 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79  ue = ToJulianDay
6d80: 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  (dt);....#if !PL
6d90: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6da0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6dc0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6dd0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6de0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6df0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6e00: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6e30: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6e40: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6e50: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6e70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6e80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6e90: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
6ea0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6eb0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
6ec0: 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ble(handle, inde
6ed0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
6ee0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6ef0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6f00: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6f10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6f20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
6f30: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
6f40: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
6f50: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6f80: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6f90: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6fa0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
6fb0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
6fe0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6ff0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
7000: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
7010: 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20  .UnixEpoch:..   
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7040: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
7050: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34   Convert.ToInt64
7060: 28 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69  (dt.Subtract(Uni
7070: 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63  xEpoch).TotalSec
7080: 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  onds);....#if !P
7090: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
70a0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
70c0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
70d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
70e0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
70f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7100: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7130: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
7140: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
7150: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7170: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7180: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
7190: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
71a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
71b0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
71c0: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
71d0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
71e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
71f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7200: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7210: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7220: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
7230: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
7240: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
7250: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7270: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7280: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7290: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
72a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
72b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72d0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
72e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
72f0: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
7300: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
7310: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7320: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
7330: 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b   b = ToUTF8(dt);
7340: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7350: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7360: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7370: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7380: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7390: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
73a0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
73b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
73c0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
73d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
7400: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
7410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7420: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7440: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7450: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7460: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7470: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
7480: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7490: 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  b, b.Length - 1,
74a0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
74b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74c0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
74d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
74e0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
74f0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
7500: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
7510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7520: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7540: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
7550: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7560: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
7570: 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53  ind_Blob(SQLiteS
7580: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7590: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
75a0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
75b0: 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c  index, byte[] bl
75c0: 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a  obData)..    {..
75d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
75e0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
75f0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
7600: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
7610: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7620: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7630: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
7640: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7650: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7660: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7670: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7680: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
7690: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
76a0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
76b0: 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20  , blobData);..  
76c0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
76d0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
76e0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
76f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7700: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7710: 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64  blob(handle, ind
7720: 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c  ex, blobData, bl
7730: 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28  obData.Length, (
7740: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
7750: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
7760: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7770: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7780: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7790: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
77a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
77b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
77c0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c  e void Bind_Null
77d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
77e0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
77f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
7800: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
7810: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
7820: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
7830: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
7840: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
7850: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7860: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7870: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
7880: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7890: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
78a0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
78b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
78c0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
78d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
78e0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
78f0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
7900: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
7910: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7920: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7930: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7940: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
7950: 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  l(handle, index)
7960: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
7970: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7980: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7990: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
79a0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
79b0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
79c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
79d0: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
79e0: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
79f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7a00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7a10: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
7a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7a30: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
7a40: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
7a50: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
7a60: 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75          int valu
7a70: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
7a80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7a90: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
7aa0: 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d  ount(handle);...
7ab0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7ac0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7ad0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7ae0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7af0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7b00: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7b10: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7b20: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7b30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
7b40: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
7b50: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7b70: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
7b80: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
7b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ba0: 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20   "Statement {0} 
7bb0: 70 61 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69  paramter count i
7bc0: 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  s {1}.",..      
7bd0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
7be0: 49 6e 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b  IntPtr, value));
7bf0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
7c00: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  dif....        r
7c10: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
7c20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7c30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
7c40: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
7c50: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
7c60: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
7c70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
7c80: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
7c90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7ca0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7cb0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
7cc0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7cd0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
7ce0: 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
7cf0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7d00: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
7d10: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  n;..        name
7d20: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
7d30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7d40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7d50: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
7d60: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
7d70: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
7d80: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
7d90: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
7da0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7db0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7dc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
7dd0: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
7de0: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
7df0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21  .#endif....#if !
7e00: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7e10: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7e20: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7e30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7e40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7e50: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7e60: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7e70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7e80: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
7e90: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
7ea0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
7eb0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
7ec0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
7ed0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
7ee0: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
7ef0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
7f00: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
7f10: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
7f30: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
7f40: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
7f50: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7f60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61         return na
7f70: 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me;..    }....  
7f80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7f90: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
7fa0: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
7fb0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
7fc0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7fd0: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
7fe0: 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20  g paramName)..  
7ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
8000: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
8010: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
8020: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
8030: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
8040: 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  x = UnsafeNative
8050: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8060: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
8070: 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55  ndex(handle, ToU
8080: 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b  TF8(paramName));
8090: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
80a0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
80b0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
80c0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
80d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
80e0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
80f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8100: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8120: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
8130: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
8140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
8150: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
8160: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
8170: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
8180: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
8190: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
81a0: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
81b0: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
81d0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
81e0: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
81f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
8200: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
8210: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
8220: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8230: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
8240: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
8250: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8260: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8270: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
8280: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8290: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
82a0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
82b0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
82c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
82d0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
82e0: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
82f0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
8300: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
8310: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8320: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
8330: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
8340: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
8350: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8360: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8370: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
8380: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8390: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
83a0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
83b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
83c0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
83d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
83e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
83f0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
8400: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
8410: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8420: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8430: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
8440: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
8450: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
8460: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
8470: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
8480: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
8490: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
84a0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
84b0: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
84c0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
84d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
84e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
84f0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
8500: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
8510: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
8520: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
8530: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
8540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
8550: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
8560: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8570: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
8580: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8590: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
85a0: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
85b0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
85c0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
85d0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
85e0: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
85f0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
8600: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8610: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
8620: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
8630: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8640: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
8650: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
8660: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
8670: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
8680: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
8690: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
86a0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
86b0: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
86c0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
86d0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
86e0: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
86f0: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
8700: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
8710: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
8720: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
8730: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
8740: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
8750: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8760: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
8770: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
8780: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
8790: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
87a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
87b0: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
87c0: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
87d0: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
87e0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
87f0: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
8800: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
8810: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
8820: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
8830: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
8840: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
8850: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
8860: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
8870: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
8880: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
8890: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
88a0: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
88b0: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
88c0: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
88d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
88e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
88f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8900: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
8910: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
8920: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
8930: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
8940: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
8950: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
8960: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
8970: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
8980: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
8990: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
89a0: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
89b0: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
89c0: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
89d0: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
89e0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
89f0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
8a00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8a10: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
8a20: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
8a30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8a40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
8a50: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
8a60: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
8a70: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
8a80: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
8a90: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8aa0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
8ab0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
8ac0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8ad0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8ae0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8af0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
8b00: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
8b10: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8b20: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
8b30: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8b40: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
8b50: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8b60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8b70: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
8b80: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
8b90: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
8ba0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8bb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8bc0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
8bd0: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
8be0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
8bf0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
8c00: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
8c10: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
8c20: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
8c30: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
8c40: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8c50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8c60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8c70: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
8c80: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8c90: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
8ca0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
8cb0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8cc0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8cd0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8ce0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8cf0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
8d00: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
8d10: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
8d20: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8d30: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8d40: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
8d50: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
8d60: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
8d70: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
8d80: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
8d90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8da0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
8db0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
8dc0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8de0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8df0: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
8e00: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
8e10: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
8e20: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
8e30: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
8e40: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8e50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8e60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8e70: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
8e80: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8e90: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8ea0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8eb0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8ec0: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
8ed0: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
8ee0: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
8ef0: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
8f00: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
8f10: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
8f20: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
8f30: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
8f40: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
8f50: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
8f60: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
8f70: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
8f80: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
8f90: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
8fa0: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
8fb0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
8fc0: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
8fd0: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
8fe0: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
8ff0: 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  nc;..      SQLit
9000: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20  eErrorCode n;.. 
9010: 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d       int dtLen;.
9020: 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e  .      int csLen
9030: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
9040: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9050: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9060: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9070: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
9080: 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f  tadata_interop(_
9090: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
90a0: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
90b0: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
90c0: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
90d0: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
90e0: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
90f0: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
9100: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
9110: 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f  nc, out dtLen, o
9120: 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73  ut csLen);..#els
9130: 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  e..      dtLen =
9140: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65   -1;..      csLe
9150: 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20  n = -1;....     
9160: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9170: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9180: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
9190: 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55  tadata(_sql, ToU
91a0: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
91b0: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
91c0: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
91d0: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
91e0: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
91f0: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
9200: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
9210: 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65  t nautoInc);..#e
9220: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
9230: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
9240: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
9250: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9260: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
9270: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
9280: 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
9290: 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
92a0: 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
92b0: 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
92c0: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
92d0: 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
92e0: 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
92f0: 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
9300: 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
9310: 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
9320: 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
9330: 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
9340: 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
9350: 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
9360: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9370: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
9380: 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
9390: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
93a0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
93b0: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
93c0: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
93d0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
93e0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
93f0: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
9400: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9410: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
9420: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
9430: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
9440: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
9450: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9460: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
9470: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
9480: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9490: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
94a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
94b0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
94c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
94d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
94e0: 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
94f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9500: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
9510: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
9520: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
9530: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9540: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
9550: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9560: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
9570: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9580: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
9590: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
95a0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
95b0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
95c0: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23    long value;..#
95d0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
95e0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
95f0: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
9600: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9610: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9620: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
9630: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
9640: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
9650: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9660: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9670: 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  n_int64_interop(
9680: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9690: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61  t, index, out va
96a0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
96b0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
96c0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
96d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
96e0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78  de string GetTex
96f0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
9700: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9710: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
9720: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
9730: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
9740: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
9750: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
9760: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9770: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
9780: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
9790: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
97a0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
97b0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
97c0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
97d0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
97e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
97f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
9800: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9810: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
9820: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
9830: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9840: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
9850: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
9860: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9870: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9880: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
9890: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
98a0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
98b0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
98c0: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
98d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
98e0: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
98f0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
9900: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
9910: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
9920: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
9930: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
9940: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9950: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9960: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
9970: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
9980: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
9990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
99a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
99b0: 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74  g GetBytes(SQLit
99c0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
99d0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
99e0: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
99f0: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
9a00: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
9a10: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
9a20: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
9a30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9a40: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9a50: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
9a60: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
9a70: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
9a80: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
9a90: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
9aa0: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
9ab0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
9ac0: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
9ad0: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
9ae0: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
9af0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
9b00: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
9b10: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
9b20: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
9b30: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
9b40: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
9b50: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
9b60: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
9b70: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
9b80: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
9b90: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
9ba0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
9bb0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
9bc0: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
9bd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9be0: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d  _column_blob(stm
9bf0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9c00: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
9c10: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
9c20: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
9c30: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
9c40: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
9c50: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
9c60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
9c70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
9c80: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
9c90: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
9ca0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
9cb0: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
9cc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9cd0: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
9ce0: 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
9cf0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9d00: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
9d10: 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
9d20: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
9d30: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
9d40: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
9d50: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
9d60: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
9d70: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
9d80: 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
9d90: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
9da0: 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
9db0: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
9dc0: 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
9dd0: 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
9de0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
9df0: 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
9e00: 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
9e10: 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
9e20: 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
9e30: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
9e40: 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
9e50: 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
9e60: 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
9e70: 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
9e80: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
9e90: 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
9ea0: 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
9eb0: 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
9ec0: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
9ed0: 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
9ee0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
9ef0: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
9f00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9f10: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
9f20: 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
9f30: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9f40: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
9f50: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
9f60: 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
9f70: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
9f80: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
9f90: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
9fa0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9fb0: 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
9fc0: 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
9fd0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
9fe0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9ff0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a000: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
a010: 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
a020: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a030: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a040: 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e  e void CreateFun
a050: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ction(string str
a060: 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41  Function, int nA
a070: 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f  rgs, bool needCo
a080: 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c  llSeq, SQLiteCal
a090: 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69  lback func, SQLi
a0a0: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73  teCallback funcs
a0b0: 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c  tep, SQLiteFinal
a0c0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e  Callback funcfin
a0d0: 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  al)..    {..    
a0e0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
a0f0: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
a100: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
a110: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
a120: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a130: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
a140: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
a150: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
a160: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
a170: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
a180: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
a190: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
a1a0: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
a1b0: 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20   1 : 0);..      
a1c0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
a1d0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
a1e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a1f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
a200: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
a210: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
a220: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
a230: 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
a240: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
a250: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
a260: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
a270: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
a280: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
a290: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a2a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a2b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
a2c0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
a2d0: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
a2e0: 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
a2f0: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
a300: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20  , funcfinal);.. 
a310: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
a320: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a330: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
a340: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a350: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
a360: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
a370: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
a380: 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
a390: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
a3a0: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
a3b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
a3c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
a3d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
a3e0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
a3f0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
a400: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
a410: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a420: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
a430: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73  reateCollation(s
a440: 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69  tring strCollati
a450: 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  on, SQLiteCollat
a460: 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ion func, SQLite
a470: 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36  Collation func16
a480: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a490: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a4a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a4b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a4c0: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
a4d0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
a4e0: 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20  rCollation), 2, 
a4f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
a500: 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  c16);..      if 
a510: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
a520: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
a530: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a540: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
a550: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
a560: 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
a570: 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72  tion), 1, IntPtr
a580: 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20  .Zero, func);.. 
a590: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
a5a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a5b0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
a5c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
a5d0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
a5e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a5f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a600: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
a610: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
a620: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
a630: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
a640: 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
a650: 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
a660: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a670: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
a680: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
a690: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
a6a0: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
a6b0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
a6c0: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
a6d0: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
a6e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a6f0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
a700: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
a710: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
a720: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
a730: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
a740: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
a750: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
a760: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
a770: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
a780: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
a790: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
a7a0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
a7b0: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
a7c0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
a7d0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
a7e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
a7f0: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
a800: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
a810: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
a820: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
a830: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
a840: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
a850: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
a860: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
a870: 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
a880: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
a890: 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
a8a0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
a8b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a8c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
a8d0: 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
a8e0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
a8f0: 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
a900: 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
a910: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
a920: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
a930: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
a940: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
a950: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a960: 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
a970: 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
a980: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
a990: 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
a9a0: 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
a9b0: 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
a9c0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
a9d0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
a9e0: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
a9f0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
aa00: 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
aa10: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
aa20: 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
aa30: 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
aa40: 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
aa50: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
aa60: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
aa70: 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
aa80: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
aa90: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
aaa0: 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
aab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
aac0: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
aad0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
aae0: 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
aaf0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
ab00: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
ab10: 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
ab20: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ab30: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
ab40: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
ab50: 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
ab60: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
ab70: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
ab80: 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
ab90: 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
aba0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
abb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
abc0: 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
abd0: 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20  etBytes(c1);..  
abe0: 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
abf0: 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b  er.GetBytes(c2);
ac00: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ac10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ac20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
ac30: 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
ac40: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
ac50: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
ac60: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
ac70: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ac80: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ac90: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
aca0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
acb0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
acc0: 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
acd0: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
ace0: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
acf0: 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
ad00: 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
ad10: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
ad20: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
ad30: 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
ad40: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
ad50: 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
ad60: 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
ad70: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
ad80: 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20      int type;.. 
ad90: 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20       int enc;.. 
ada0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
adb0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
adc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
add0: 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65  ext_collseq_inte
ade0: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74  rop(context, out
adf0: 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20   type, out enc, 
ae00: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  out len);....   
ae10: 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c     if (p != null
ae20: 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46  ) seq.Name = UTF
ae30: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
ae40: 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79  );..      seq.Ty
ae50: 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54  pe = (CollationT
ae60: 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20  ypeEnum)type;.. 
ae70: 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d       seq._func =
ae80: 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65   func;..      se
ae90: 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f  q.Encoding = (Co
aea0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
aeb0: 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20  num)enc;....    
aec0: 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23    return seq;..#
aed0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
aee0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
aef0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
af00: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
af10: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
af20: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
af30: 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73  tParamValueBytes
af40: 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e  (IntPtr p, int n
af50: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
af60: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
af70: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
af80: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
af90: 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61   int nlen = Unsa
afa0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
afb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
afc0: 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  tes(p);....     
afd0: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
afe0: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
aff0: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
b000: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
b010: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
b020: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
b030: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
b040: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
b050: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
b060: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
b070: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
b080: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
b090: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
b0a0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
b0b0: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
b0c0: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
b0d0: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
b0e0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
b0f0: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
b100: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
b110: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
b120: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b130: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
b140: 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ob(p);....      
b150: 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28    Marshal.Copy((
b160: 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e  IntPtr)(ptr.ToIn
b170: 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66  t64() + nDataOff
b180: 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74  set), bDest, nSt
b190: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
b1a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
b1b0: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
b1c0: 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20        nCopied = 
b1d0: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
b1e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
b1f0: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
b200: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b210: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50  ride double GetP
b220: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
b230: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
b240: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
b250: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
b260: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b270: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
b280: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
b290: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b2a0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
b2b0: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
b2c0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b2d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b2e0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
b2f0: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
b300: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
b310: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
b320: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
b330: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b340: 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56  de int GetParamV
b350: 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72  alueInt32(IntPtr
b360: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
b370: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
b380: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b390: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
b3a0: 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
b3b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b3c0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
b3d0: 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49  aramValueInt64(I
b3e0: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
b3f0: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76  {..      Int64 v
b400: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
b410: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
b420: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
b430: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
b440: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b450: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72  _value_int64(ptr
b460: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b470: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b480: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
b490: 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  ue_int64_interop
b4a0: 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29  (ptr, out value)
b4b0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
b4c0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
b4d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b4e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
b4f0: 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61  tring GetParamVa
b500: 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70  lueText(IntPtr p
b510: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  tr)..    {..#if 
b520: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b530: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
b540: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b550: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
b560: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b570: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
b580: 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  xt_interop(ptr, 
b590: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
b5a0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
b5b0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
b5c0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
b5d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
b5e0: 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 20 2d  lue_text(ptr), -
b5f0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
b600: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b610: 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
b620: 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61  Affinity GetPara
b630: 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74  mValueType(IntPt
b640: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
b650: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b660: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b670: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
b680: 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  pe(ptr);..    }.
b690: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b6a0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
b6b0: 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20  turnBlob(IntPtr 
b6c0: 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20  context, byte[] 
b6d0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
b6e0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
b6f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b700: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
b710: 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c  text, value, val
b720: 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  ue.Length, (IntP
b730: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
b740: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b750: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
b760: 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
b770: 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
b780: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
b790: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
b7a0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
b7b0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
b7c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b7d0: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
b7e0: 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  e(context, value
b7f0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b800: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b810: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
b820: 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ult_double_inter
b830: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
b840: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
b850: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b860: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b870: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
b880: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
b890: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
b8a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
b8b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b8c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b8d0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
b8e0: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
b8f0: 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
b900: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b910: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
b920: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
b930: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
b940: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
b950: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b960: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b970: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
b980: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
b990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b9a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b9b0: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
b9c0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
b9d0: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
b9e0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
b9f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
ba00: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
ba10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ba20: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
ba30: 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
ba40: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
ba50: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
ba60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
ba70: 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72  sult_int64_inter
ba80: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
ba90: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
baa0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
bab0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
bac0: 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
bad0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
bae0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
baf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bb00: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
bb10: 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
bb20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
bb30: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
bb40: 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
bb50: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
bb60: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
bb70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
bb80: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
bb90: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
bba0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bbb0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
bbc0: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
bbd0: 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
bbe0: 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
bbf0: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
bc00: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bc10: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72   override IntPtr
bc20: 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78   AggregateContex
bc30: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
bc40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
bc50: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
bc60: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bc70: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
bc80: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29  text(context, 1)
bc90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bca0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
bcb0: 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
bcc0: 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
bcd0: 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
bce0: 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
bcf0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
bd00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bd10: 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
bd20: 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
bd30: 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
bd40: 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
bd50: 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
bd60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
bd70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bd80: 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
bd90: 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
bda0: 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
bdb0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
bdc0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
bdd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bde0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
bdf0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
be00: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
be10: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
be20: 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
be30: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
be40: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
be50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
be60: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
be70: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
be80: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
be90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
bea0: 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
beb0: 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
bec0: 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
bed0: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
bee0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
bef0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bf00: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
bf10: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
bf20: 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
bf30: 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
bf40: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
bf50: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
bf60: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
bf70: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bf80: 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
bf90: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
bfa0: 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
bfb0: 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
bfc0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
bfd0: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
bfe0: 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
bff0: 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
c000: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
c010: 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
c020: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
c030: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c040: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
c050: 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
c060: 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
c070: 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
c080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
c090: 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
c0a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
c0b0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
c0c0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
c0d0: 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
c0e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
c0f0: 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
c100: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
c110: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
c120: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
c130: 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
c140: 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
c150: 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
c160: 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
c170: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
c180: 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
c190: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c1a0: 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
c1b0: 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
c1d0: 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
c1e0: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
c1f0: 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
c200: 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
c210: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
c220: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
c230: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c240: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
c250: 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
c260: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
c270: 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
c280: 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
c290: 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
c2a0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
c2b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c2c0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
c2d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
c2e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c2f0: 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
c300: 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
c310: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c320: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
c330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c340: 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
c350: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
c360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c370: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
c380: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c390: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
c3a0: 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
c3b0: 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
c3c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
c3d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c3e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
c3f0: 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
c400: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
c410: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
c420: 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
c430: 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
c440: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c450: 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
c460: 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
c470: 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
c480: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c490: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
c4a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c4b0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
c4c0: 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
c4d0: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
c4e0: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
c4f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
c500: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c510: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c520: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c530: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c540: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
c550: 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
c560: 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
c570: 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
c580: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
c590: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
c5a0: 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
c5b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
c5c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c5d0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
c5e0: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
c5f0: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
c600: 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
c610: 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
c620: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c630: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
c640: 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
c650: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
c660: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
c670: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
c680: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
c690: 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
c6a0: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
c6b0: 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
c6c0: 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
c6d0: 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
c6e0: 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
c6f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c700: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
c710: 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
c720: 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
c730: 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
c740: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c750: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c760: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ods.sqlite3_log(
c770: 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38  iErrCode, ToUTF8
c780: 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20  (zMessage));..  
c790: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
c7a0: 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e  OP_CODEC..    in
c7b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c7c0: 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64  void SetPassword
c7d0: 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64  (byte[] password
c7e0: 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
c7f0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c800: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c810: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c820: 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70  ite3_key(_sql, p
c830: 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61  asswordBytes, pa
c840: 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
c850: 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
c860: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c870: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
c880: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
c890: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
c8a0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
c8b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c8c0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e  erride void Chan
c8d0: 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  gePassword(byte[
c8e0: 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  ] newPasswordByt
c8f0: 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
c900: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c910: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
c920: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c930: 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
c940: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
c950: 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
c960: 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
c970: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
c980: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
c990: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
c9a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
c9b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
c9c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
c9d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
c9e0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
c9f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ca00: 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64  ride void SetUpd
ca10: 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70  ateHook(SQLiteUp
ca20: 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  dateCallback fun
ca30: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
ca40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ca50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64  hods.sqlite3_upd
ca60: 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ate_hook(_sql, f
ca70: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
ca80: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ca90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
caa0: 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  de void SetCommi
cab0: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
cac0: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
cad0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
cae0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
caf0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  ds.sqlite3_commi
cb00: 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  t_hook(_sql, fun
cb10: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
cb20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cb30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cb40: 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61   void SetTraceCa
cb50: 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61  llback(SQLiteTra
cb60: 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ceCallback func)
cb70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
cb80: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cb90: 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65  ds.sqlite3_trace
cba0: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
cbb0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
cbc0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
cbd0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
cbe0: 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
cbf0: 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61  SQLiteRollbackCa
cc00: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
cc10: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
cc20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
cc30: 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
cc40: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
cc50: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
cc60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
cc70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
cc80: 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73  /// Allows the s
cc90: 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67  etting of a logg
cca0: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76  ing callback inv
ccb0: 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  oked by SQLite w
ccc0: 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c  hen a..    /// l
ccd0: 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e  og event occurs.
cce0: 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62    Only one callb
ccf0: 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20  ack may be set. 
cd00: 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73   If NULL is pass
cd10: 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ed,..    /// the
cd20: 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
cd30: 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65  k is unregistere
cd40: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
cd50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
cd60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
cd70: 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  c">The callback 
cd80: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  function to invo
cd90: 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ke.</param>..   
cda0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
cdb0: 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63  turns a result c
cdc0: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
cdd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cde0: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
cdf0: 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62  Code SetLogCallb
ce00: 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c  ack(SQLiteLogCal
ce10: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
ce20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
ce30: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
ce40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ce50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
ce60: 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20  fig_log(..      
ce70: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
ce80: 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
ce90: 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e  _CONFIG_LOG, fun
cea0: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
ceb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
cec0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
ced0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
cf40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
cf50: 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77  // Creates a new
cf60: 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f   SQLite backup o
cf70: 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74  bject based on t
cf80: 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74  he provided dest
cf90: 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
cfa0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
cfb0: 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63  tion.  The sourc
cfc0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
cfd0: 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65  ction is the one
cfe0: 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  ..    /// associ
cff0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
d000: 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72  bject.  The sour
d010: 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69  ce and destinati
d020: 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  on database..   
d030: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   /// connections
d040: 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73   cannot be the s
d050: 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ame...    /// </
d060: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
d070: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
d080: 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74  estCnn">The dest
d090: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
d0a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
d0b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
d0c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e  aram name="destN
d0d0: 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61  ame">The destina
d0e0: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61  tion database na
d0f0: 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
d100: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d110: 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68  ="sourceName">Th
d120: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
d130: 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
d140: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
d150: 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61  s>The newly crea
d160: 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ted backup objec
d170: 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
d180: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d190: 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70  ide SQLiteBackup
d1a0: 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75   InitializeBacku
d1b0: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
d1c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73  teConnection des
d1d0: 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73  tCnn,..        s
d1e0: 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d  tring destName,.
d1f0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
d200: 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20  sourceName..    
d210: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
d220: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e        if (destCn
d230: 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
d240: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d250: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
d260: 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e  ception("destCnn
d270: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
d280: 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e  f (destName == n
d290: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d2a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
d2b0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
d2c0: 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a  n("destName");..
d2d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
d2e0: 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  urceName == null
d2f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
d300: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
d310: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
d320: 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d  sourceName");...
d330: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33  .        SQLite3
d340: 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64   destSqlite3 = d
d350: 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53  estCnn._sql as S
d360: 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20  QLite3;....     
d370: 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74     if (destSqlit
d380: 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  e3 == null)..   
d390: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d3a0: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
d3b0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
d3c0: 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
d3d0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
d3e0: 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c  as no wrapper.",
d3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d400: 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d    "destCnn");...
d410: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
d420: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
d430: 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73  destHandle = des
d440: 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a  tSqlite3._sql;..
d450: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
d460: 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  stHandle == null
d470: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
d480: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
d490: 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
d4b0: 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
d4c0: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
d4d0: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20  lid handle.",.. 
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d4f0: 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
d500: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
d510: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75  ectionHandle sou
d520: 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c  rceHandle = _sql
d530: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d540: 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d  (sourceHandle ==
d550: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d560: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
d570: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
d580: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
d590: 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63            "Sourc
d5a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  e connection has
d5b0: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
d5c0: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
d5d0: 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61    byte[] zDestNa
d5e0: 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74  me = ToUTF8(dest
d5f0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
d600: 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61  byte[] zSourceNa
d610: 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72  me = ToUTF8(sour
d620: 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
d630: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
d640: 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e  Handle backupHan
d650: 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  dle = null;.... 
d660: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
d670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d680: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
d690: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
d6a0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
d6b0: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
d6c0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
d6d0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
d6f0: 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73  Ptr backup = Uns
d700: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d710: 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
d720: 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  init(..         
d730: 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c         destHandl
d740: 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
d750: 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75  urceHandle, zSou
d760: 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
d770: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63           if (bac
d780: 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  kup == IntPtr.Ze
d790: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
d7a0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
d7b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 52  QLiteException(R
d7c0: 65 73 75 6c 74 43 6f 64 65 28 29 2c 20 47 65 74  esultCode(), Get
d7d0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
d7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63  .            bac
d7f0: 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  kupHandle = new 
d800: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
d810: 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62  le(destHandle, b
d820: 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20  ackup);..       
d830: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
d840: 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
d850: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
d860: 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70      this, backup
d870: 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64  Handle, destHand
d880: 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
d890: 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20  ourceHandle,..  
d8a0: 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63            zSourc
d8b0: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
d8c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
d8d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70  ry>..    /// Cop
d8e0: 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65  ies up to N page
d8f0: 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  s from the sourc
d900: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
d910: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  e destination.. 
d920: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
d930: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
d940: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
d950: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
d960: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d980: 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
d990: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
d9a0: 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
d9b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d9c0: 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a   name="nPage">..
d9d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
d9e0: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63  er of pages to c
d9f0: 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f  opy, negative to
da00: 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e   copy all remain
da10: 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20  ing pages...    
da20: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
da30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
da40: 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20  e="retry">..    
da50: 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20  /// Set to true 
da60: 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  if the operation
da70: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74   needs to be ret
da80: 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61  ried due to data
da90: 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  base..    /// lo
daa0: 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74  cking issues; ot
dab0: 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20  herwise, set to 
dac0: 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  false...    /// 
dad0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
dae0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
daf0: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65   /// True if the
db00: 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65  re are more page
db10: 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20  s to be copied, 
db20: 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  false otherwise.
db30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
db40: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
db50: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
db60: 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20   StepBackup(..  
db70: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
db80: 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20  up backup,..    
db90: 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a      int nPage,..
dba0: 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c          out bool
dbb0: 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20   retry..        
dbc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
dbd0: 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b    retry = false;
dbe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
dbf0: 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
dc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
dc10: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
dc20: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
dc30: 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
dc40: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
dc50: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
dc60: 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
dc70: 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
dc80: 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
dc90: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
dca0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
dcb0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
dcc0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
dcd0: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
dce0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
dcf0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
dd00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
dd10: 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
dd20: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
dd30: 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
dd40: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
dd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
dd60: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
dd70: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
dd80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
dd90: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
dda0: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
ddb0: 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
ddc0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
ddd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
dde0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ddf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
de00: 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c  ackup_step(handl
de10: 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20  ePtr, nPage);.. 
de20: 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73         backup._s
de30: 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f  tepResult = n; /
de40: 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72  * NOTE: Save for
de50: 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61   use by FinishBa
de60: 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ckup. */....    
de70: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
de80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
de90: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
dea0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
deb0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
dec0: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
ded0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
dee0: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
def0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
df00: 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
df10: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
df20: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
df30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
df40: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
df50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
df60: 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20  Locked)..       
df70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
df80: 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
df90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dfa0: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
dfb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
dfc0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
dfd0: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d  ErrorCode.Done).
dfe0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
e000: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
e010: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
e020: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e030: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e040: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
e050: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
e060: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
e070: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
e080: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e090: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
e0a0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
e0b0: 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
e0c0: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
e0d0: 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f   source..    ///
e0e0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
e0f0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
e100: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
e110: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
e120: 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63  ied..    /// bac
e130: 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
e140: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e150: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
e160: 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
e170: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
e180: 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
e190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
e1a0: 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
e1b0: 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
e1c0: 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c  g to be copied.<
e1d0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
e1e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e1f0: 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61   int RemainingBa
e200: 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
e210: 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
e220: 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
e230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
e240: 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
e250: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e260: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
e270: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
e280: 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
e290: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
e2a0: 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
e2b0: 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
e2c0: 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
e2d0: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
e2e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e2f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
e300: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
e310: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
e320: 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
e330: 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
e340: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
e350: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
e360: 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
e370: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
e380: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
e390: 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
e3a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e3b0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
e3c0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
e3d0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
e3e0: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
e3f0: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
e400: 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
e410: 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
e420: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
e430: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e440: 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69  te3_backup_remai
e450: 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b  ning(handlePtr);
e460: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
e470: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e480: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
e490: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
e4a0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
e4b0: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61  ource database a
e4c0: 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f  ssociated..    /
e4d0: 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
e4e0: 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
e4f0: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
e500: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e510: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
e520: 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
e530: 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
e540: 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
e550: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
e560: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
e570: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
e580: 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  urce database.</
e590: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
e5a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e5b0: 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63  int PageCountBac
e5c0: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
e5d0: 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
e5e0: 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
e5f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
e600: 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
e610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
e620: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
e630: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
e640: 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
e650: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
e660: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
e670: 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
e680: 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
e690: 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
e6a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e6b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e6c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e6d0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e6e0: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
e6f0: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
e700: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
e710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
e720: 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
e730: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
e740: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
e750: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
e760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
e770: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
e780: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
e790: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
e7a0: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
e7b0: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
e7c0: 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
e7d0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
e7e0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
e7f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e800: 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f  e3_backup_pageco
e810: 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  unt(handlePtr);.
e820: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
e830: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e840: 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68   /// Destroys th
e850: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c  e backup object,
e860: 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e   rolling back an
e870: 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61  y backup that ma
e880: 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  y be in..    ///
e890: 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f   progess...    /
e8a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e8b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e8c0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
e8d0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
e8e0: 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d   destroy.</param
e8f0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
e900: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69  override void Fi
e910: 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20  nishBackup(..   
e920: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
e930: 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
e940: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
e950: 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
e960: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e970: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
e980: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
e990: 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
e9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
e9b0: 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
e9c0: 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
e9d0: 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
e9e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
e9f0: 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
ea00: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
ea10: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
ea20: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
ea50: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
ea60: 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
ea70: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
ea80: 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
ea90: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
eaa0: 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
eab0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
eac0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ead0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
eae0: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
eaf0: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
eb00: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
eb10: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
eb20: 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
eb30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
eb40: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
eb50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
eb60: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
eb70: 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b  nish(handlePtr);
eb80: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
eb90: 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61  .SetHandleAsInva
eba0: 6c 69 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lid();....      
ebb0: 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
ebc0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
ebd0: 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
ebe0: 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
ebf0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
ec00: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
ec10: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
ec20: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
ec30: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
eca0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ecb0: 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
ecc0: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
ecd0: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
ece0: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
ecf0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
ed00: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
ed10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
ed20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
ed30: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
ed40: 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
ed50: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
ed60: 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
ed70: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
ed80: 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
ed90: 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
eda0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
edb0: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
edc0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
edd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ede0: 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
edf0: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
ee00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
ee10: 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
ee20: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ee30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ee40: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
ee50: 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
ee60: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
ee70: 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
ee80: 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
ee90: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
eea0: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
eeb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
eec0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
eed0: 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
eee0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
eef0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
ef00: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
ef10: 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
ef20: 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
ef30: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
ef40: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
ef50: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
ef60: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
ef70: 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
ef80: 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
ef90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
efa0: 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
efb0: 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
efc0: 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
efd0: 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
efe0: 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
eff0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
f000: 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
f010: 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
f020: 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
f030: 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
f040: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
f050: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
f060: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
f070: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
f080: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
f090: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
f0a0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
f0b0: 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
f0c0: 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
f0d0: 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
f0e0: 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
f0f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
f100: 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
f110: 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
f120: 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
f130: 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
f140: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
f150: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
f160: 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
f170: 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
f180: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f190: 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
f1a0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
f1b0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
f1c0: 20 20 20 20 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a       {..#endif..
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
f1f0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
f200: 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65  s method [ab]use
f210: 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  s the fact that 
f220: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
f230: 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ys..            
f240: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74      //       ret
f250: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
f260: 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e   for any unknown
f270: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
f280: 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..         
f290: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f2a0: 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c  *unless* the SQL
f2b0: 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ite library has 
f2c0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
f2d0: 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  tialized...     
f2e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
f2f0: 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73 65      In that case
f300: 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20   it will always 
f310: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
f320: 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20  SUSE...         
f330: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
f340: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
f350: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
f360: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f370: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
f380: 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20  ig_none(..      
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
f3a0: 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
f3b0: 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
f3c0: 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  NONE);....      
f3d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f3e0: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
f3f0: 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b  rorCode.Misuse);
f400: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
f410: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
f420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
f440: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
f450: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f460: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
f470: 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e  nabled = savedEn
f480: 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
f490: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
f4a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
f4b0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
f4c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
f4d0: 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
f4e0: 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
f4f0: 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
f500: 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
f510: 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
f520: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f530: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
f540: 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
f550: 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
f560: 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
f570: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f580: 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54  m name="index">T
f590: 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  he column index 
f5a0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
f5b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
f5c0: 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
f5d0: 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20  he type of data 
f5e0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
f5f0: 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69   column.  If Uni
f600: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73  nitialized, this
f610: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
f620: 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61  etrieve the data
f630: 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  type information
f640: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
f650: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
f660: 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20  rns the data in 
f670: 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
f680: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
f690: 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  al override obje
f6a0: 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69  ct GetValue(SQLi
f6b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f6c0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c  , int index, SQL
f6d0: 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20  iteType typ)..  
f6e0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49    {..      if (I
f6f0: 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65  sNull(stmt, inde
f700: 78 29 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c  x)) return DBNul
f710: 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l.Value;..      
f720: 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
f730: 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b   = typ.Affinity;
f740: 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
f750: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
f760: 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
f770: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
f780: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f790: 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
f7a0: 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
f7b0: 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
f7c0: 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
f7d0: 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20  ffinity(t);..   
f7e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77     }....      sw
f7f0: 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20  itch (aff)..    
f800: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
f810: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
f820: 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  lob:..          
f830: 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
f840: 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 74  DbType.Guid && t
f850: 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
f860: 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
f870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
f880: 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47  eturn new Guid(G
f890: 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
f8a0: 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex));....       
f8b0: 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
f8c0: 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
f8d0: 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30  ndex, 0, null, 0
f8e0: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , 0);..         
f8f0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20   byte[] b = new 
f900: 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20  byte[n];..      
f910: 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d      GetBytes(stm
f920: 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20  t, index, 0, b, 
f930: 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  0, n);....      
f940: 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
f950: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
f960: 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20  && n == 16)..   
f970: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f980: 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a  new Guid(b);....
f990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f9a0: 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73   b;..        cas
f9b0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
f9c0: 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20  ateTime:..      
f9d0: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 61      return GetDa
f9e0: 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64  teTime(stmt, ind
f9f0: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ex);..        ca
fa00: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
fa10: 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
fa20: 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
fa30: 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62  ) return GetDoub
fa40: 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  le(stmt, index);
fa50: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
fa60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fa70: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
fa80: 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c  ngeType(GetDoubl
fa90: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
faa0: 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
fab0: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
fac0: 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
fad0: 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
fae0: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
faf0: 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
fb00: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  x);..          e
fb10: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
fb20: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
fb30: 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
fb40: 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
fb50: 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
fb60: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
fb70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fb80: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
fb90: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
fba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
fbb0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
fbc0: 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
fbd0: 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
fbe0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
fbf0: 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
fc00: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
fc10: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
fc20: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
fc30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fc40: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
fc50: 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
fc60: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
fc70: 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
fc80: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
fc90: 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
fca0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
fcb0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fcc0: 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
fcd0: 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
fce0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
fcf0: 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
fd00: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
fd10: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
fd20: 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20  g rowid;..      
fd30: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
fd40: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
fd50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fd60: 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e  _cursor_rowid_in
fd70: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
fd80: 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c  te_stmt, cursor,
fd90: 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20   out rowid);..  
fda0: 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51      if (rc == SQ
fdb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
fdc0: 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d  ) return rowid;.
fdd0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
fde0: 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  0;..#else..     
fdf0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64   return 0;..#end
fe00: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
fe10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
fe20: 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78  de void GetIndex
fe30: 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e  ColumnExtendedIn
fe40: 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61  fo(string databa
fe50: 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78  se, string index
fe60: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
fe70: 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64   out int sortMod
fe80: 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72  e, out int onErr
fe90: 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  or, out string c
fea0: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
feb0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
fec0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
fed0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
fee0: 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f  l;..      int co
fef0: 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51  lllen;..      SQ
ff00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
ff10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
ff20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ff30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
ff40: 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
ff50: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
ff60: 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
ff70: 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
ff80: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
ff90: 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f   sortMode, out o
ffa0: 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c  nError, out coll
ffb0: 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , out colllen);.
ffc0: 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
ffd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ffe0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
fff0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
10000 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  c, null);....   
10010 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
10020 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
10030 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
10040 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10050 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
10060 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
10070 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
10080 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
10090 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
100a0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
100b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
100c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
100d0 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
100e0 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
100f0 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
10100 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10110 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
10120 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10130 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
10140 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21  _sql, (zDbName !
10150 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38  = null) ? ToUTF8
10160 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c  (zDbName) : null
10170 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20  , op, pArg);..  
10180 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..