System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact fff1daee0309308f23afb7e34c5d5f735915fb9d:


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 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1c30: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
1c40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
1c50: 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 20 20  anges(_sql);..  
1c60: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1c70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1c80: 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72  rride long Memor
1c90: 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  yUsed..    {..  
1ca0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1cb0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
1cc0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
1cd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1ce0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1cf0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
1d00: 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c  ory_used();..#el
1d10: 73 65 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67  se..        long
1d20: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
1d30: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1d40: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1d50: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74  _memory_used_int
1d60: 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29 3b  erop(ref bytes);
1d70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1d80: 20 62 79 74 65 73 3b 0d 0a 23 65 6e 64 69 66 0d   bytes;..#endif.
1d90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1da0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1db0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65  override long Me
1dc0: 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20  moryHighwater.. 
1dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1de0: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  .      {..#if !P
1df0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
1e00: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
1e10: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1e20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1e30: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
1e40: 77 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 73 65  water(0);..#else
1e50: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62  ..        long b
1e60: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
1e70: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1e80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
1e90: 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f  emory_highwater_
1ea0: 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62  interop(0, ref b
1eb0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
1ec0: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
1ed0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
1ee0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1ef0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
1f00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
1f10: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
1f20: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
1f30: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1f40: 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72  n StaticSetMemor
1f50: 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d  yStatus(value);.
1f60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1f70: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
1f80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
1f90: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
1fa0: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
1fb0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1fc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1fd0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
1fe0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1ff0: 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20  _config_int(..  
2000: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2010: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
2020: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
2030: 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31  TATUS, value ? 1
2040: 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   : 0);....      
2050: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
2060: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2070: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2080: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
2090: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
20a0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
20b0: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
20c0: 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f  fferent config o
20d0: 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ptions...    ///
20e0: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
20f0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
2100: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
2110: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2120: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
2130: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
2140: 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
2150: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
2160: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
2170: 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64  eErrorCode Shutd
2180: 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  own()..    {..  
2190: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
21a0: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
21b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
21c0: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
21d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
21e0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
21f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2200: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70  erride bool IsOp
2210: 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  en()..    {..   
2220: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71       return (_sq
2230: 6c 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  l != null);..   
2240: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2250: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
2260: 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72   Open(string str
2270: 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65  Filename, SQLite
2280: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
2290: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c  connectionFlags,
22a0: 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73   SQLiteOpenFlags
22b0: 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20  Enum openFlags, 
22c0: 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  int maxPoolSize,
22d0: 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a   bool usePool)..
22e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
22f0: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 72  (_sql != null) r
2300: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
2310: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
2320: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
2330: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
2340: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
2350: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
2360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
2370: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
2380: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
2390: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
23a0: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
23b0: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23  olVersion);....#
23c0: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
23d0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
23e0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
23f0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2400: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
2410: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
2420: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
2430: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
2440: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
2450: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
2470: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
2480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
2490: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
24a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
24b0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
24c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
24d0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
24e0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
24f0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
2500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2510: 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a 20     IntPtr db;.. 
2520: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
2530: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
2540: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
2550: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ARD..          i
2560: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
2570: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
2580: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
2590: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
25a0: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
25b0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
25c0: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
25d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
25e0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
25f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2600: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
2610: 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73  interop(ToUTF8(s
2620: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65  trFilename), ope
2630: 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b  nFlags, out db);
2640: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
2650: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23           else..#
2660: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2680: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2690: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
26a0: 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73  open_v2(ToUTF8(s
26b0: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74  trFilename), out
26c0: 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20   db, openFlags, 
26d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
26e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
26f0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2700: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2710: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2720: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2730: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
2740: 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29  Open: {0}", db))
2750: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
2760: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
2770: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
2780: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
2790: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
27a0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
27b0: 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51     _sql = new SQ
27c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
27d0: 6e 64 6c 65 28 64 62 29 3b 0d 0a 20 20 20 20 20  ndle(db);..     
27e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f     }..        lo
27f0: 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48  ck (_sql) { /* H
2800: 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53  ACK: Force the S
2810: 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22  yncBlock to be "
2820: 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f  created" now. */
2830: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
2840: 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74     // Bind funct
2850: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e  ions to this con
2860: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79  nection.  If any
2870: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
2880: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ons of the same 
2890: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77  name..      // w
28a0: 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e  ere already boun
28b0: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  d, then the new 
28c0: 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65  bindings replace
28d0: 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20   the old...     
28e0: 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72 61 79   _functionsArray
28f0: 20 3d 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   = SQLiteFunctio
2900: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
2910: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
2920: 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 53  Flags);..      S
2930: 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20  etTimeout(0);.. 
2940: 20 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76       GC.KeepAliv
2950: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
2960: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2970: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
2980: 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  earPool()..    {
2990: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
29a0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65  nnectionPool.Cle
29b0: 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65  arPool(_fileName
29c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
29d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
29e0: 64 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c  de int CountPool
29f0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2a00: 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74     Dictionary<st
2a10: 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74  ring, int> count
2a20: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
2a30: 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74     int openCount
2a40: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
2a50: 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20  nt closeCount = 
2a60: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
2a70: 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d  totalCount = 0;.
2a80: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
2a90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
2aa0: 47 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e  GetCounts(_fileN
2ab0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2ac0: 20 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65    ref counts, re
2ad0: 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66  f openCount, ref
2ae0: 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20   closeCount,..  
2af0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74 6f            ref to
2b00: 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  talCount);....  
2b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74        return tot
2b20: 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d  alCount;..    }.
2b30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2b40: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
2b50: 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69  tTimeout(int nTi
2b60: 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d  meoutMS)..    {.
2b70: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
2b80: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
2b90: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2ba0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
2bb0: 6f 75 74 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f  out(_sql, nTimeo
2bc0: 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66  utMS);..      if
2bd0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
2be0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
2bf0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2c00: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
2c10: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
2c20: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2c30: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
2c40: 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ep(SQLiteStateme
2c50: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
2c60: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
2c70: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20  orCode n;..     
2c80: 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75   Random rnd = nu
2c90: 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  ll;..      uint 
2ca0: 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e  starttick = (uin
2cb0: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
2cc0: 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ckCount;..      
2cd0: 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28  uint timeout = (
2ce0: 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d  uint)(stmt._comm
2cf0: 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65  and._commandTime
2d00: 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a  out * 1000);....
2d10: 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75        while (tru
2d20: 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
2d30: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
2d40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2d50: 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f  ite3_step(stmt._
2d60: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d  sqlite_stmt);...
2d70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
2d80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
2d90: 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72  e.Row) return tr
2da0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ue;..        if 
2db0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
2dc0: 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75  rCode.Done) retu
2dd0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
2de0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
2df0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
2e00: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2e10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
2e20: 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20  rorCode r;....  
2e30: 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72          // An er
2e40: 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74  ror occurred, at
2e50: 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74  tempt to reset t
2e60: 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  he statement.  I
2e70: 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b  f the reset work
2e80: 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a  ed because the..
2e90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68            // sch
2ea0: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ema has changed,
2eb0: 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70   re-try the step
2ec0: 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65   again.  If it e
2ed0: 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75  rrored our becau
2ee0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d  se the database.
2ef0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73  .          // is
2f00: 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65   locked, then ke
2f10: 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69  ep retrying unti
2f20: 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69  l the command ti
2f30: 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20  meout occurs... 
2f40: 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73           r = Res
2f50: 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  et(stmt);....   
2f60: 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20         if (r == 
2f70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
2f80: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
2f90: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
2fa0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
2fb0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
2fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
2fd0: 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74   if ((r == SQLit
2fe0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
2ff0: 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65  d || r == SQLite
3000: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
3010: 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  && stmt._command
3020: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
3030: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3040: 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69      // Keep tryi
3050: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
3060: 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29  if (rnd == null)
3070: 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77   // First time w
3080: 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64  e've encountered
3090: 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20   the lock..     
30a0: 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e           rnd = n
30b0: 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a  ew Random();....
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49              // I
30d0: 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64  f we've exceeded
30e0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74   the command's t
30f0: 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20  imeout, give up 
3100: 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72  and throw an err
3110: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
3120: 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f  if ((uint)Enviro
3130: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20  nment.TickCount 
3140: 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69  - starttick > ti
3150: 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20  meout)..        
3160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3170: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
3180: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
3190: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
31a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
31c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
31d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31e0: 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73    // Otherwise s
31f0: 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f  leep for a rando
3200: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
3210: 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20   up to 150ms..  
3220: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
3230: 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72  em.Threading.Thr
3240: 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65  ead.Sleep(rnd.Ne
3250: 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20  xt(1, 150));..  
3260: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3280: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
3290: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
32a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
32b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73  iteErrorCode Res
32c0: 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  et(SQLiteStateme
32d0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
32e0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
32f0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
3300: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3310: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
3320: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3330: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69  .sqlite3_reset_i
3340: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
3350: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73  ite_stmt);..#els
3360: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
3370: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3380: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73  .sqlite3_reset(s
3390: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
33a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
33b0: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63      // If the sc
33c0: 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72  hema changed, tr
33d0: 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65  y and re-prepare
33e0: 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e   it..      if (n
33f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
3400: 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20  ode.Schema)..   
3410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
3420: 20 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d   Recreate a dumm
3430: 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  y statement..   
3440: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 3b       string str;
3450: 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20  ..        using 
3460: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
3470: 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28 6e   tmp = Prepare(n
3480: 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74  ull, stmt._sqlSt
3490: 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28  atement, null, (
34a0: 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d  uint)(stmt._comm
34b0: 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65  and._commandTime
34c0: 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 6f 75 74  out * 1000), out
34d0: 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20 20   str))..        
34e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
34f0: 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78 69  Finalize the exi
3500: 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d  sting statement.
3510: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
3520: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73  _sqlite_stmt.Dis
3530: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
3540: 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20 61     // Reassign a
3550: 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20 70   new statement p
3560: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 6c  ointer to the ol
3570: 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  d statement and 
3580: 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f 72  clear the tempor
3590: 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20  ary one..       
35a0: 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f     stmt._sqlite_
35b0: 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69  stmt = tmp._sqli
35c0: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
35d0: 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f      tmp._sqlite_
35e0: 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  stmt = null;....
35f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
3600: 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d  pply parameters.
3610: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
3620: 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29  BindParameters()
3630: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53 51        return (SQ
3650: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 29 28 2d  LiteErrorCode)(-
3660: 31 29 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  1); // Reset was
3670: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
3680: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
3690: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
36a0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
36b0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
36c0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
36d0: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
36e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
36f0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
3700: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3710: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
3720: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
3730: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
3740: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
3750: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
3760: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 20 2f  eErrorCode.Ok; /
3770: 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e  / We reset OK, n
3780: 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  o schema changes
3790: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
37a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
37b0: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
37c0: 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  rror()..    {.. 
37d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
37e0: 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72  teBase.GetLastEr
37f0: 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b  ror(_sql, _sql);
3800: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3810: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3820: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
3830: 20 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43   Prepare(SQLiteC
3840: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73  onnection cnn, s
3850: 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51  tring strSql, SQ
3860: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72  LiteStatement pr
3870: 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d  evious, uint tim
3880: 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69  eoutMS, out stri
3890: 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20  ng strRemain).. 
38a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
38b0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
38c0: 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a  Empty(strSql))..
38d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38e0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
38f0: 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65  NOTE: SQLite doe
3900: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68  s not support th
3910: 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70  e concept of sep
3920: 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20  arate schemas.. 
3930: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
3940: 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b  in one database;
3950: 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f   therefore, remo
3960: 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68 65  ve the base sche
3970: 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ma name..       
3980: 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20 74   //       used t
3990: 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61  o smooth integra
39a0: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61  tion with the ba
39b0: 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  se .NET Framewor
39c0: 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  k..        //   
39d0: 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65 73      data classes
39e0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
39f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61         string ba
3a00: 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28  seSchemaName = (
3a10: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
3a20: 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  nn._baseSchemaNa
3a30: 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me : null;....  
3a40: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
3a50: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
3a60: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29  baseSchemaName))
3a70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3a80: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
3a90: 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d  strSql.Replace(.
3aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
3ab0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
3ac0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
3ad0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
3ae0: 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d            "[{0}]
3af0: 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61  .", baseSchemaNa
3b00: 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  me), String.Empt
3b10: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3b20: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
3b30: 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20  .Replace(..     
3b40: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
3b50: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
3b60: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
3b70: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
3b80: 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65      "{0}.", base
3b90: 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72  SchemaName), Str
3ba0: 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
3bb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
3bc0: 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  ...      SQLiteC
3bd0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
3be0: 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20  lags =..        
3bf0: 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20    (cnn != null) 
3c00: 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51  ? cnn.Flags : SQ
3c10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3c20: 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a  ags.Default;....
3c30: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
3c40: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
3c50: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
3c60: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
3c70: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
3c80: 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  are) == SQLiteCo
3c90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
3ca0: 67 50 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20  gPrepare)..     
3cb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
3cc0: 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c   ((strSql == nul
3cd0: 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65  l) || (strSql.Le
3ce0: 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73  ngth == 0) || (s
3cf0: 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e  trSql.Trim().Len
3d00: 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  gth == 0))..    
3d10: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3d20: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22  Log.LogMessage("
3d30: 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68  Preparing {<noth
3d40: 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20  ing>}...");..   
3d50: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
3d60: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
3d70: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
3d80: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
3db0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50  rrentCulture, "P
3dc0: 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d  reparing {{{0}}}
3dd0: 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d  ...", strSql));.
3de0: 0a 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  .      }..#endif
3df0: 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  ....      IntPtr
3e00: 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a   stmt = IntPtr.Z
3e10: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  ero;..      IntP
3e20: 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e  tr ptr = IntPtr.
3e30: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Zero;..      int
3e40: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
3e50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3e60: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
3e70: 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20  Code.Schema;..  
3e80: 20 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20      int retries 
3e90: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 62 79 74 65  = 0;..      byte
3ea0: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74  [] b = ToUTF8(st
3eb0: 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74  rSql);..      st
3ec0: 72 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20  ring typedefs = 
3ed0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c  null;..      SQL
3ee0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64  iteStatement cmd
3ef0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
3f00: 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c  Random rnd = nul
3f10: 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73  l;..      uint s
3f20: 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74  tarttick = (uint
3f30: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
3f40: 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  kCount;....     
3f50: 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65   GCHandle handle
3f60: 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f   = GCHandle.Allo
3f70: 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70  c(b, GCHandleTyp
3f80: 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20  e.Pinned);..    
3f90: 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20    IntPtr psql = 
3fa0: 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e  handle.AddrOfPin
3fb0: 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  nedObject();..  
3fc0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
3fd0: 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d  entHandle statem
3fe0: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  entHandle = null
3ff0: 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20  ;..      try..  
4000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77      {..        w
4010: 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69  hile ((n == SQLi
4020: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
4030: 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ma || n == SQLit
4040: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
4050: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
4060: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
4070: 26 26 20 72 65 74 72 69 65 73 20 3c 20 33 29 0d  && retries < 3).
4080: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4090: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
40a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
40b0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
40c0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  g...          }.
40d0: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c  .          final
40e0: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
40f0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
4100: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
4110: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
4120: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4130: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
4140: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4150: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
4160: 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  e_interop(_sql, 
4170: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
4180: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
4190: 74 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b  t ptr, out len);
41a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
41b0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
41c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
41d0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
41e0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
41f0: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
4200: 20 6f 75 74 20 70 74 72 29 3b 0d 0a 20 20 20 20   out ptr);..    
4210: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31          len = -1
4220: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
4230: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
4240: 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d   && TRACE_STATEM
4250: 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ENT..           
4260: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
4270: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
4280: 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b  Prepare ({0}): {
4290: 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d  1}", n, stmt));.
42a0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
42b0: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
42c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
42d0: 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d  .Ok) && (stmt !=
42e0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4300: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20  atementHandle = 
4310: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
4320: 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20  entHandle(_sql, 
4330: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
4340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4350: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
4360: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
4370: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
4380: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
4390: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
43a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
43b0: 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20  de.Error)..     
43c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
43d0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
43e0: 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72  ompare(GetLastEr
43f0: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
4400: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
4410: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
4420: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
4430: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
4440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
4460: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
4470: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4490: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
44a0: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
44b0: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
44c0: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
44d0: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
44e0: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4500: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
4510: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
4520: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4530: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
4540: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
4550: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
4560: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
4570: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4580: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
45a0: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
45b0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
45c0: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
45d0: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
4600: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
4610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4620: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
4630: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4640: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
4650: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
4660: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4670: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
4680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
4690: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
46a0: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26  40 || NET_45) &&
46b0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
46c0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
46d0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
46e0: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
46f0: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
4700: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
4710: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
4720: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
4730: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
4740: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
4750: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
4760: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
4770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4790: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20  Remain = "";..  
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
47b0: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
47c0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
47d0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
47e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
47f0: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
4800: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
4810: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
4820: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
4830: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
4840: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
4850: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
4860: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
4870: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
4880: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
48a0: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
48d0: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
48f0: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
4900: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
4910: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
4920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4930: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
4940: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
4950: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
4960: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  , timeoutMS, out
4970: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
49a0: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
49b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
49c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
49d0: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
49e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
49f0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
4a30: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
4a40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4a50: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
4a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
4a70: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
4a80: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
4a90: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
4aa0: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
4ab0: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
4ac0: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
4ad0: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
4ae0: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
4af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b00: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
4b10: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
4b20: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
4b30: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
4b40: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
4b50: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
4b70: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
4b80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b90: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
4ba0: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
4bb0: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
4bc0: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
4bd0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
4be0: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
4bf0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
4c00: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
4c10: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
4c20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4c30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4c40: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4c50: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
4c60: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
4c70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4c80: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4c90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ca0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
4cb0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
4cc0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
4cd0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
4ce0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
4cf0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
4d00: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
4d10: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
4d20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4d30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
4d40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4d50: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
4d60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4d70: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
4d80: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
4d90: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
4da0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65  ...        strRe
4db0: 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72  main = UTF8ToStr
4dc0: 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a  ing(ptr, len);..
4dd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
4de0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
4df0: 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77   null) cmd = new
4e00: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
4e10: 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74  (this, flags, st
4e20: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
4e30: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
4e40: 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  0, strSql.Length
4e50: 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e   - strRemain.Len
4e60: 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b  gth), previous);
4e70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
4e80: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d  rn cmd;..      }
4e90: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d  ..      finally.
4ea0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4eb0: 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b    handle.Free();
4ec0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4ed0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
4ee0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
4ef0: 52 4b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  RK..    protecte
4f00: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
4f10: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
4f20: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
4f30: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  le, int index)..
4f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
4f50: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
4f60: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
4f70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
4f80: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
4f90: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
4fa0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
4fb0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
4fc0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
4fd0: 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20   NULL...",..    
4fe0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
4ff0: 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  tPtr, index));..
5000: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
5010: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
5020: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
5030: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
5040: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
5050: 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61  ex, ValueType va
5060: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5070: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
5080: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5090: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
50a0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
50b0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
50c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
50d0: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
50e0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
50f0: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5100: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5110: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5120: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5130: 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e  r, index, value.
5140: 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65  GetType(), value
5150: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
5160: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
5170: 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61   string FormatDa
5180: 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20  teTime(DateTime 
5190: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
51a0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
51b0: 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65  lder result = ne
51c0: 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
51d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
51e0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
51f0: 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79  e.ToString("yyyy
5200: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e  -MM-ddTHH:mm:ss.
5210: 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20  FFFFFFFK"));..  
5220: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
5230: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
5240: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
5250: 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20  (value.Kind);.. 
5260: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
5270: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
5280: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
5290: 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d  d(value.Ticks);.
52a0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
52b0: 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e  n result.ToStrin
52c0: 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g();..    }.... 
52d0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
52e0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
52f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5300: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
5310: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
5320: 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  me value)..    {
5330: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
5340: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
5350: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
5360: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
5370: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
5380: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
5390: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
53a0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
53b0: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
53c0: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
53d0: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
53e0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
53f0: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74  IntPtr, index, t
5400: 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c  ypeof(DateTime),
5410: 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28   FormatDateTime(
5420: 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d  value)));..    }
5430: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
5440: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
5450: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
5460: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
5470: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73  le, int index, s
5480: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
5490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
54a0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
54b0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
54c0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
54d0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
54e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
54f0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5500: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5510: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5520: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
5530: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
5540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
5550: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
5560: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
5570: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
5580: 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75  ) ? value : "<nu
5590: 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ll>"));..    }..
55a0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
55b0: 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65  atic string ToHe
55c0: 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28  xadecimalString(
55d0: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
55e0: 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20   array..        
55f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5600: 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e    if (array == n
5610: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5620: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
5630: 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
5640: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
5650: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
5660: 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20  er(array.Length 
5670: 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  * 2);....       
5680: 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72   int length = ar
5690: 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  ray.Length;.... 
56a0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
56b0: 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
56c0: 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78   < length; index
56d0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
56e0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61   result.Append(a
56f0: 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74  rray[index].ToSt
5700: 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a  ring("x2"));....
5710: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
5720: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
5730: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5740: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5750: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5760: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5770: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
5780: 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61  index, byte[] va
5790: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
57a0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
57b0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
57c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
57d0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
57e0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
57f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5800: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5810: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5820: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5830: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5840: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5850: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5860: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
5870: 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65  (Byte[]), (value
5880: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65   != null) ? ToHe
5890: 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28  xadecimalString(
58a0: 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e  value) : "<null>
58b0: 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  "));..    }..#en
58c0: 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
58d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
58e0: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
58f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
5900: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
5910: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
5920: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
5930: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
5940: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
5950: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
5960: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
5970: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
5980: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5990: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
59a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
59b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
59c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
59d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
59e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
59f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
5a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
5a10: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
5a20: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
5a30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5a40: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
5a50: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
5a60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5a70: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
5a80: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
5a90: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
5aa0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5ab0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5ac0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5ad0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
5ae0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
5af0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
5b00: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
5b10: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
5b20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5b30: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
5b40: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
5b50: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
5b60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5b70: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5b80: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28  void Bind_Int32(
5b90: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
5ba0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
5bb0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
5bc0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  s, int index, in
5bd0: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
5be0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
5bf0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5c00: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
5c10: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
5c20: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5c30: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5c40: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
5c50: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
5c60: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
5c70: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
5c80: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
5c90: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
5cb0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
5cc0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
5cd0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
5ce0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5cf0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5d00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5d10: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
5d20: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
5d30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
5d40: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
5d50: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
5d60: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5d70: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
5d80: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
5d90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5da0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
5db0: 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51  d Bind_UInt32(SQ
5dc0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
5dd0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
5de0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
5df0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74   int index, uint
5e00: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5e10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
5e20: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
5e30: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
5e40: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
5e50: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5e60: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5e70: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
5e80: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5e90: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5ea0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5eb0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
5ec0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
5ed0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
5ee0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
5ef0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
5f00: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
5f10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5f20: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
5f30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5f40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
5f50: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
5f60: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
5f70: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
5f80: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
5f90: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5fa0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
5fb0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
5fc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5fd0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
5fe0: 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c  d Bind_Int64(SQL
5ff0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
6000: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
6010: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
6020: 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20  int index, long 
6030: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
6040: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
6050: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6060: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
6070: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
6080: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6090: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
60a0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
60b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
60c0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
60d0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
60e0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
60f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6100: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
6110: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
6120: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
6130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
6140: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6150: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6160: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6170: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
6180: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6190: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
61a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
61b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
61c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
61d0: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
61e0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
61f0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
6200: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
6210: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
6220: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
6230: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6240: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
6250: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
6260: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6270: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
6280: 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69  Bind_UInt64(SQLi
6290: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
62a0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
62b0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
62c0: 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20  nt index, ulong 
62d0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
62e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
62f0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6300: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
6310: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
6320: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6330: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6340: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6350: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6360: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
6370: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
6380: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6390: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
63a0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
63b0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
63c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
63d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
63e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
63f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6400: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6410: 69 6e 64 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c  ind_uint64(handl
6420: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
6430: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6440: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6450: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6460: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6470: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e  3_bind_uint64_in
6480: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
6490: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
64a0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
64b0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
64c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
64d0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
64e0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
64f0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
6500: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6510: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
6520: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
6530: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
6540: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
6550: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
6560: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
6570: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6580: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
6590: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
65a0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
65b0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
65c0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
65d0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
65e0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
65f0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6600: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6610: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6620: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6630: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6640: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6650: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6660: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6670: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
6680: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
6690: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
66a0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
66b0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
66c0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
66d0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
66e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
66f0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6700: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6710: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6730: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6740: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
6750: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
6760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6770: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6790: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
67a0: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
67b0: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
67c0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
67d0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
67e0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
67f0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
6800: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6810: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6820: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
6830: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6840: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
6850: 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69  nd_DateTime(SQLi
6860: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
6870: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
6880: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
6890: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
68a0: 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  me dt)..    {.. 
68b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
68c0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
68d0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
68e0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
68f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6900: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6910: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6920: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6930: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
6940: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
6950: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6960: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6970: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
6980: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
6990: 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   dt);..        }
69a0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
69b0: 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74      switch (_dat
69c0: 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20  etimeFormat)..  
69d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
69e0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
69f0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
6a00: 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
6a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6a20: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
6a30: 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73  value = dt.Ticks
6a40: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6a50: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6a60: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
6a70: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
6a80: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
6a90: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
6aa0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
6ab0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6ac0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6af0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6b00: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6b10: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
6b20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
6b50: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
6b60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6b70: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
6b80: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6b90: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bb0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6bc0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6bd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6be0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
6bf0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
6c00: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
6c10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6c30: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
6c40: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
6c50: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6c60: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
6c70: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
6c90: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
6ca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6cb0: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
6cc0: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
6cd0: 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20  nDay:..         
6ce0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
6d00: 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a  uble value = ToJ
6d10: 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d  ulianDay(dt);...
6d20: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
6d30: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d50: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6d60: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6d70: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6d80: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6d90: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6da0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
6db0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6dd0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6de0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
6df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6e00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6e30: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6e40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6e50: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
6e60: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
6e70: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
6e90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6ea0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6eb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6ec0: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
6ed0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
6ee0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
6ef0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
6f00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
6f10: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
6f20: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
6f30: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
6f40: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
6f50: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
6f60: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
6f70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6f80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6f90: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
6fa0: 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f  eFormats.UnixEpo
6fb0: 63 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ch:..           
6fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
6fe0: 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74   value = Convert
6ff0: 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74  .ToInt64(dt.Subt
7000: 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e  ract(UnixEpoch).
7010: 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a  TotalSeconds);..
7020: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
7030: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7050: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
7060: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7070: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7080: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7090: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
70a0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
70b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70d0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
70e0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
70f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7100: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7120: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7130: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7140: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7150: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
7160: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
7170: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7190: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
71a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
71b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
71c0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
71d0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
71e0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
71f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7200: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
7210: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7220: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7230: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7240: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7250: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
7260: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
7270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7290: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
72a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72c0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
72d0: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
72e0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
72f0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7310: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
7320: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7330: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
7340: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7350: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
7360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
7390: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
73a0: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
73c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
73e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
73f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7400: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7410: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
7420: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
7430: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
7440: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7460: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
7470: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
7480: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7490: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
74a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
74c0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
74d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
74e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
74f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7500: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
7510: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7520: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
7530: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
7540: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
7550: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
7560: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7570: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7580: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
7590: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
75a0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
75b0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
75c0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
75d0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
75e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
75f0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7600: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7610: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7620: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7630: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7640: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
7650: 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ta);..        }.
7660: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
7670: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7680: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
7690: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
76a0: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e  e3_bind_blob(han
76b0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
76c0: 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c  Data, blobData.L
76d0: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
76e0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
76f0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
7700: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
7710: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7720: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
7730: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
7740: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7750: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
7760: 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53  ind_Null(SQLiteS
7770: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7780: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7790: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
77a0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
77b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
77c0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
77d0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
77e0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
77f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
7800: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7810: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
7820: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7830: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
7840: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
7850: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7860: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7870: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
7880: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
7890: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
78a0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
78b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
78c0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
78d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
78e0: 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65  bind_null(handle
78f0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
7900: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
7910: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7920: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7930: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
7940: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
7950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7960: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
7970: 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e  t Bind_ParamCoun
7980: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
7990: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
79a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
79b0: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
79c0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
79d0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
79e0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
79f0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
7a00: 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61  int value = Unsa
7a10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7a20: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
7a30: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e  ameter_count(han
7a40: 64 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  dle);....#if !PL
7a50: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7a60: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
7a70: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7a80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7a90: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
7aa0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ab0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7ac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7ad0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
7ae0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
7af0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
7b00: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
7b10: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
7b20: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
7b30: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
7b40: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
7b50: 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c   count is {1}.",
7b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b70: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
7b80: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20  value));..      
7b90: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7ba0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
7bb0: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
7bc0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7bd0: 72 69 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64  ride string Bind
7be0: 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74  _ParamName(SQLit
7bf0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7c00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7c10: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
7c20: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
7c30: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
7c40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
7c50: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
7c60: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20  lite_stmt;..    
7c70: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b      string name;
7c80: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
7c90: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
7ca0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
7cb0: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
7cc0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
7cd0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7ce0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7cf0: 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  er_name_interop(
7d00: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 6f  handle, index, o
7d10: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
7d20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e  #else..        n
7d30: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
7d40: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
7d50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7d60: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
7d70: 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  me(handle, index
7d80: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
7d90: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
7da0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
7db0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
7dc0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
7dd0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7de0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
7df0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7e00: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
7e10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7e20: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
7e30: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
7e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
7e50: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
7e60: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
7e70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7e80: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
7e90: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
7ea0: 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e  name is {{{2}}}.
7eb0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
7ec0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
7ed0: 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b  , index, name));
7ee0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
7ef0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  dif....        r
7f00: 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20  eturn name;..   
7f10: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7f20: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
7f30: 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28  Bind_ParamIndex(
7f40: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
7f50: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
7f60: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
7f70: 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  s, string paramN
7f80: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
7f90: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7fa0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
7fb0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
7fc0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
7fd0: 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61  int index = Unsa
7fe0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7ff0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
8000: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e  ameter_index(han
8010: 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61  dle, ToUTF8(para
8020: 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 23 69 66 20  mName));....#if 
8030: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8040: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8050: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8060: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8070: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8080: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8090: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
80a0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
80b0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
80c0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
80d0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
80e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
80f0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
8100: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
8110: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
8120: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
8130: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
8140: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
8150: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
8160: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
8170: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
8180: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
8190: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
81a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64        return ind
81b0: 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ex;..    }....  
81c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
81d0: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f  ide int ColumnCo
81e0: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
81f0: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
8200: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
8210: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8220: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8230: 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71  n_count(stmt._sq
8240: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20  lite_stmt);..   
8250: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8260: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
8270: 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51  ng ColumnName(SQ
8280: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8290: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
82a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
82b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
82c0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
82d0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
82e0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
82f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8300: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69  e3_column_name_i
8310: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8320: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
8330: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
8340: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8350: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8360: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8370: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8380: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
8390: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
83a0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
83b0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
83c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
83d0: 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
83e0: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53  ColumnAffinity(S
83f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8400: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
8410: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
8420: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
8430: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8440: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d  _column_type(stm
8450: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8460: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
8470: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8480: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
8490: 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65  olumnType(SQLite
84a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
84b0: 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54  int index, out T
84c0: 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66  ypeAffinity nAff
84d0: 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20  inity)..    {.. 
84e0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23       int len;..#
84f0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8500: 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
8510: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
8520: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8530: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
8540: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
8550: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8560: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23  ex, out len);..#
8570: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20  else..      len 
8580: 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74  = -1;..      Int
8590: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
85a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
85b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
85c0: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
85d0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
85e0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41  #endif..      nA
85f0: 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e  ffinity = Column
8600: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
8610: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
8620: 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e  if (p != IntPtr.
8630: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46  Zero) return UTF
8640: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
8650: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a  );..      else..
8660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8670: 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73   string[] ar = s
8680: 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69  tmt.TypeDefiniti
8690: 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ons;..        if
86a0: 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (ar != null).. 
86b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
86c0: 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20      if (index < 
86d0: 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b  ar.Length && ar[
86e0: 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d  index] != null).
86f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
8700: 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a  urn ar[index];..
8710: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8720: 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
8730: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
8740: 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66     //switch (nAf
8750: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20  finity)..       
8760: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f   //{..        //
8770: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
8780: 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
8790: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
87a0: 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20   "BIGINT";..    
87b0: 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70      //  case Typ
87c0: 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
87d0: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
87e0: 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22   return "DOUBLE"
87f0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
8800: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
8810: 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
8820: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c  //    return "BL
8830: 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  OB";..        //
8840: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
8850: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
8860: 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20   "TEXT";..      
8870: 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a    //}..      }..
8880: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8890: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
88a0: 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53  nt ColumnIndex(S
88b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
88c0: 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  tmt, string colu
88d0: 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  mnName)..    {..
88e0: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f        int x = Co
88f0: 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b  lumnCount(stmt);
8900: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69  ....      for (i
8910: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b  nt n = 0; n < x;
8920: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   n++)..      {..
8930: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
8940: 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d  ng.Compare(colum
8950: 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d  nName, ColumnNam
8960: 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69  e(stmt, n), Stri
8970: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
8980: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
8990: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
89a0: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
89b0: 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
89c0: 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n -1;..    }....
89d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
89e0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
89f0: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
8a00: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8a10: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
8a20: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
8a30: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8a40: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
8a50: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
8a60: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
8a70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8a80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
8a90: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
8aa0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8ab0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
8ac0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
8ad0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
8ae0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8af0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8b00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
8b10: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
8b20: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8b30: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
8b40: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
8b50: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8b60: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
8b70: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
8b80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8b90: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
8ba0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8bb0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8bc0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
8bd0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
8be0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
8bf0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8c00: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
8c10: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
8c20: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8c30: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
8c40: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
8c50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
8c60: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
8c70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8c80: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
8c90: 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
8ca0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8cb0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8cc0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8cd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8ce0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
8cf0: 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74  nTableName(SQLit
8d00: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8d10: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
8d20: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
8d30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8d40: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
8d50: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
8d60: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8d70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8d80: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
8d90: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
8da0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8db0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
8dc0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
8dd0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
8de0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
8df0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8e00: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
8e10: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
8e20: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
8e30: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8e40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8e50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8e60: 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
8e70: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
8e80: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
8e90: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
8ea0: 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  t string dataTyp
8eb0: 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  e, out string co
8ec0: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f  llateSequence, o
8ed0: 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ut bool notNull,
8ee0: 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72   out bool primar
8ef0: 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61  yKey, out bool a
8f00: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20  utoIncrement).. 
8f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
8f20: 74 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d  tr dataTypePtr;.
8f30: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
8f40: 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20  llSeqPtr;..     
8f50: 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a   int nnotNull;..
8f60: 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61        int nprima
8f70: 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e  ryKey;..      in
8f80: 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20  t nautoInc;..   
8f90: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8fa0: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
8fb0: 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
8fc0: 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
8fd0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8fe0: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
8ff0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9000: 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
9010: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69  olumn_metadata_i
9020: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
9030: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
9040: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
9050: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
9060: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
9070: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
9080: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
9090: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
90a0: 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20  t nautoInc, out 
90b0: 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e  dtLen, out csLen
90c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
90d0: 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20   dtLen = -1;..  
90e0: 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d      csLen = -1;.
90f0: 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  ...      n = Uns
9100: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9110: 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
9120: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f  olumn_metadata(_
9130: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
9140: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
9150: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
9160: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
9170: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
9180: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
9190: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
91a0: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
91b0: 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  nc);..#endif..  
91c0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
91d0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
91e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
91f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
9200: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
9210: 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
9220: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
9230: 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c  dataTypePtr, dtL
9240: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  en);..      coll
9250: 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ateSequence = UT
9260: 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53  F8ToString(collS
9270: 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a  eqPtr, csLen);..
9280: 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20  ..      notNull 
9290: 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31  = (nnotNull == 1
92a0: 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72  );..      primar
92b0: 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79  yKey = (nprimary
92c0: 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Key == 1);..    
92d0: 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20    autoIncrement 
92e0: 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31  = (nautoInc == 1
92f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9300: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9310: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
9320: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
9330: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9340: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
9350: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
9360: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
9370: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
9380: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
9390: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
93a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
93b0: 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f  mn_double(stmt._
93c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
93d0: 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ex);..#else..   
93e0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
93f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9400: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
9410: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
9420: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
9430: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
9440: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
9450: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
9460: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9470: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
9480: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
9490: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
94a0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
94b0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
94c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
94d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
94e0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
94f0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
9500: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9510: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
9520: 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74  g GetInt64(SQLit
9530: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9540: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
9550: 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76   {..      long v
9560: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
9570: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
9580: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
9590: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
95a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
95b0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74  _column_int64(st
95c0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
95d0: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d   index);..#else.
95e0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
95f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9600: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
9610: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9620: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9630: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
9640: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
9650: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
9660: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9670: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
9680: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
9690: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
96a0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
96b0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
96c0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
96d0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
96e0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
96f0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
9700: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9710: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
9720: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
9730: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
9740: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
9750: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
9760: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
9770: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9780: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9790: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
97a0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
97b0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
97c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
97d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
97e0: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
97f0: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
9800: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9810: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
9820: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
9830: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
9840: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
9850: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
9860: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9870: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
9880: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
9890: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
98a0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
98b0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
98c0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
98d0: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
98e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
98f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
9900: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9910: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
9920: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
9930: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9940: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74  ride long GetByt
9950: 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
9960: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
9970: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
9980: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
9990: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
99a0: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
99b0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
99c0: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
99d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
99e0: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
99f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9a00: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
9a10: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
9a20: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
9a30: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
9a40: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
9a50: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
9a60: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
9a70: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
9a80: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
9a90: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
9aa0: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
9ab0: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
9ac0: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
9ad0: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
9ae0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
9af0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
9b00: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
9b10: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
9b20: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
9b30: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
9b40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9b50: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
9b60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9b70: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9b80: 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
9b90: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
9ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
9bb0: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
9bc0: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
9bd0: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
9be0: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
9bf0: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
9c00: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
9c10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
9c20: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
9c30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
9c40: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
9c50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9c60: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
9c70: 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69  ng GetChars(SQLi
9c80: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9c90: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
9ca0: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68   nDataOffset, ch
9cb0: 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  ar[] bDest, int 
9cc0: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
9cd0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
9ce0: 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20     int nlen;..  
9cf0: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
9d00: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
9d10: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
9d20: 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
9d30: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c  ndex);..      nl
9d40: 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b  en = str.Length;
9d50: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  ....      if (bD
9d60: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
9d70: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
9d80: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
9d90: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
9da0: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
9db0: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
9dc0: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
9dd0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
9de0: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
9df0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
9e00: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
9e10: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
9e20: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
9e30: 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44     str.CopyTo(nD
9e40: 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74  ataOffset, bDest
9e50: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
9e60: 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
9e70: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a  nCopied = 0;....
9e80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
9e90: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
9ea0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9eb0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c  rride bool IsNul
9ec0: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
9ed0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9ee0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
9ef0: 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41   return (ColumnA
9f00: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
9f10: 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69  dex) == TypeAffi
9f20: 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20  nity.Null);..   
9f30: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9f40: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
9f50: 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
9f60: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
9f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
9f80: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
9f90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9fa0: 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28  aggregate_count(
9fb0: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
9fc0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9fd0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
9fe0: 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74  reateFunction(st
9ff0: 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e  ring strFunction
a000: 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f  , int nArgs, boo
a010: 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53  l needCollSeq, S
a020: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
a030: 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  nc, SQLiteCallba
a040: 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c  ck funcstep, SQL
a050: 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b  iteFinalCallback
a060: 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20   funcfinal)..   
a070: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
a080: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
a090: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
a0a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
a0b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a0c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
a0d0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
a0e0: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
a0f0: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
a100: 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
a110: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
a120: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
a130: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
a140: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
a150: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
a160: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a170: 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
a180: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a190: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
a1a0: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
a1b0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
a1c0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
a1d0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
a1e0: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
a1f0: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
a200: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
a210: 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65  ? 1 : 0);..#else
a220: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
a230: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a240: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
a250: 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
a260: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
a270: 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
a280: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
a290: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
a2a0: 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  nal);..      if 
a2b0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
a2c0: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
a2d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a2e0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
a2f0: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
a300: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
a310: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
a320: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
a330: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
a340: 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  final);..#endif.
a350: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
a360: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a370: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
a380: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
a390: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
a3a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a3b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a3c0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c  e void CreateCol
a3d0: 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
a3e0: 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
a3f0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
a400: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
a410: 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b  n func16)..    {
a420: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
a430: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
a440: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a450: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
a460: 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
a470: 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
a480: 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a  on), 2, IntPtr.Z
a490: 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20  ero, func16);.. 
a4a0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
a4b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a4c0: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
a4d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a4e0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
a4f0: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
a500: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31  strCollation), 1
a510: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
a520: 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  unc);..      if 
a530: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
a540: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
a550: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
a560: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
a570: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
a580: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a590: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
a5a0: 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
a5b0: 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
a5c0: 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
a5d0: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
a5e0: 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73  ing s1, string s
a5f0: 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
a600: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a610: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
a620: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
a630: 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
a640: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
a650: 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
a660: 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
a670: 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
a680: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
a690: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
a6a0: 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
a6b0: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
a6c0: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
a6d0: 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
a6e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
a6f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
a700: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
a710: 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
a720: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
a730: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
a740: 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
a750: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
a760: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
a770: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
a780: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
a790: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
a7a0: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
a7b0: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
a7c0: 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
a7d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
a7e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
a7f0: 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
a800: 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a  .GetBytes(s1);..
a810: 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
a820: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32  rter.GetBytes(s2
a830: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
a840: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
a850: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a860: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
a870: 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
a880: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
a890: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
a8a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
a8b0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
a8c0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
a8d0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
a8e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a8f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
a900: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
a910: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
a920: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
a930: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
a940: 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68  t, char[] c1, ch
a950: 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d  ar[] c2)..    {.
a960: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
a970: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
a980: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
a990: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
a9a0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
a9b0: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
a9c0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
a9d0: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
a9e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a9f0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
aa00: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
aa10: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
aa20: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
aa30: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
aa40: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
aa50: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
aa60: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
aa70: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
aa80: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
aa90: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
aaa0: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
aab0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
aac0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
aad0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
aae0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
aaf0: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
ab00: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
ab10: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
ab20: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
ab30: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
ab40: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
ab50: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
ab60: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
ab70: 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  c1);..      b2 =
ab80: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
ab90: 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(c2);....    
aba0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
abb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
abc0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
abd0: 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70  lcompare_interop
abe0: 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31  (context, b1, b1
abf0: 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e  .Length, b2, b2.
ac00: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d  Length);..#else.
ac10: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
ac20: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
ac30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
ac40: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
ac50: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
ac60: 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  ide CollationSeq
ac70: 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69  uence GetCollati
ac80: 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74  onSequence(SQLit
ac90: 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20  eFunction func, 
aca0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
acb0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
acc0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
acd0: 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71      CollationSeq
ace0: 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20  uence seq = new 
acf0: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
ad00: 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e();..      int 
ad10: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
ad20: 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e 74  type;..      int
ad30: 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e 74   enc;..      Int
ad40: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
ad50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ad60: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
ad70: 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  seq_interop(cont
ad80: 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f  ext, out type, o
ad90: 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29  ut enc, out len)
ada0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
adb0: 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61   != null) seq.Na
adc0: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
add0: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
ade0: 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f    seq.Type = (Co
adf0: 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29  llationTypeEnum)
ae00: 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71  type;..      seq
ae10: 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a  ._func = func;..
ae20: 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69        seq.Encodi
ae30: 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45  ng = (CollationE
ae40: 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b  ncodingEnum)enc;
ae50: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ae60: 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   seq;..#else..  
ae70: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
ae80: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
ae90: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
aea0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
aeb0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
aec0: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
aed0: 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20  lueBytes(IntPtr 
aee0: 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  p, int nDataOffs
aef0: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
af00: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
af10: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
af20: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
af30: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
af40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
af50: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d  value_bytes(p);.
af60: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e  ...      // If n
af70: 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75  o destination bu
af80: 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65  ffer, return the
af90: 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20   size needed... 
afa0: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
afb0: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
afc0: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  len;....      in
afd0: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
afe0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  gth;....      if
aff0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
b000: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
b010: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
b020: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
b030: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
b040: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
b050: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
b060: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
b070: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
b080: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
b090: 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  > 0)..      {.. 
b0a0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74         IntPtr pt
b0b0: 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  r = UnsafeNative
b0c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b0d0: 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a  value_blob(p);..
b0e0: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
b0f0: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
b100: 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
b110: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
b120: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
b130: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
b140: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
b150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
b160: 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
b170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
b180: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
b190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b1a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75  nal override dou
b1b0: 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ble GetParamValu
b1c0: 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70  eDouble(IntPtr p
b1d0: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
b1e0: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
b1f0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
b200: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b210: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
b220: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b230: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b240: 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23  _double(ptr);..#
b250: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
b260: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b270: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
b280: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72  uble_interop(ptr
b290: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
b2a0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
b2b0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
b2c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b2d0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
b2e0: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33  etParamValueInt3
b2f0: 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  2(IntPtr ptr).. 
b300: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
b310: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
b320: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
b330: 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a  alue_int(ptr);..
b340: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b350: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
b360: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
b370: 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74  eInt64(IntPtr pt
b380: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
b390: 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23   Int64 value;..#
b3a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
b3b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
b3c0: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
b3d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b3e0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
b3f0: 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73  nt64(ptr);..#els
b400: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
b410: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b420: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
b430: 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75  _interop(ptr, ou
b440: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
b450: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
b460: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
b470: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b480: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
b490: 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28  tParamValueText(
b4a0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
b4b0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
b4c0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
b4d0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
b4e0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
b4f0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
b500: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b510: 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72  value_text_inter
b520: 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29  op(ptr, out len)
b530: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
b540: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
b550: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
b560: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b570: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
b580: 28 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  (ptr), -1);..#en
b590: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
b5a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b5b0: 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
b5c0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79   GetParamValueTy
b5d0: 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  pe(IntPtr ptr)..
b5e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
b5f0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
b600: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b610: 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b  value_type(ptr);
b620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b630: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b640: 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62   void ReturnBlob
b650: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
b660: 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
b670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
b680: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b690: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b6a0: 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61  blob(context, va
b6b0: 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
b6c0: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
b6d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b6e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b6f0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  e void ReturnDou
b700: 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
b710: 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
b720: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
b730: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
b740: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
b750: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b760: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
b770: 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
b780: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  t, value);..#els
b790: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
b7a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b7b0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
b7c0: 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  le_interop(conte
b7d0: 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
b7e0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
b7f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b800: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
b810: 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20  urnError(IntPtr 
b820: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
b830: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
b840: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
b850: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b860: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
b870: 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61  ntext, ToUTF8(va
b880: 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67  lue), value.Leng
b890: 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  th);..    }.... 
b8a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b8b0: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
b8c0: 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e  Int32(IntPtr con
b8d0: 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29  text, int value)
b8e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
b8f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b900: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
b910: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76  t_int(context, v
b920: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alue);..    }...
b930: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b940: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
b950: 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63  rnInt64(IntPtr c
b960: 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c  ontext, long val
b970: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
b980: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b990: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b9a0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b9b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
b9c0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
b9d0: 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  xt, value);..#el
b9e0: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
b9f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ba00: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
ba10: 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  64_interop(conte
ba20: 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
ba30: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
ba40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ba50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
ba60: 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63  urnNull(IntPtr c
ba70: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
ba80: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
ba90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
baa0: 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
bab0: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ntext);..    }..
bac0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bad0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
bae0: 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63  urnText(IntPtr c
baf0: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
bb00: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
bb10: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
bb20: 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20  oUTF8(value);.. 
bb30: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
bb40: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bb50: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
bb60: 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
bb70: 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  ue), b.Length - 
bb80: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
bb90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bba0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
bbb0: 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61  e IntPtr Aggrega
bbc0: 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72  teContext(IntPtr
bbd0: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
bbe0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
bbf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bc00: 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
bc10: 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
bc20: 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d  text, 1);..    }
bc30: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
bc40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45  mary>..    /// E
bc50: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
bc60: 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  ed extension loa
bc70: 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d  ding by SQLite..
bc80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
bc90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
bca0: 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66  ram name="bOnOff
bcb0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  ">..    /// True
bcc0: 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69   to enable loadi
bcd0: 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73  ng of extensions
bce0: 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62  , false to disab
bcf0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
bd00: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
bd10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
bd20: 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69  d SetLoadExtensi
bd30: 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  on(bool bOnOff).
bd40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
bd50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
bd60: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
bd70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
bd80: 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65  enable_load_exte
bd90: 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  nsion(..        
bda0: 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
bdb0: 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d  f ? -1 : 0));...
bdc0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
bdd0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
bde0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
bdf0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
be00: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
be10: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
be20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
be30: 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61  .    /// Loads a
be40: 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
be50: 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74  n library from t
be60: 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a  he named file...
be70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
be80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
be90: 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d  am name="fileNam
bea0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
beb0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e   name of the dyn
bec0: 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72  amic link librar
bed0: 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  y file containin
bee0: 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  g the extension.
bef0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
bf00: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
bf10: 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d  am name="procNam
bf20: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
bf30: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70   name of the exp
bf40: 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75  orted function u
bf50: 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  sed to initializ
bf60: 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  e the extension.
bf70: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c  ..    /// If nul
bf80: 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22  l, the default "
bf90: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
bfa0: 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20  n_init" will be 
bfb0: 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  used...    /// <
bfc0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
bfd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
bfe0: 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f  oid LoadExtensio
bff0: 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d  n(string fileNam
c000: 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61  e, string procNa
c010: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
c020: 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
c030: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
c040: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c050: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
c060: 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65  eption("fileName
c070: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
c080: 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49  ntPtr pError = I
c090: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
c0a0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
c0b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c0c0: 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69     byte[] utf8Fi
c0d0: 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  leName = UTF8Enc
c0e0: 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
c0f0: 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27  tes(fileName + '
c100: 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  \0');..         
c110: 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72     byte[] utf8Pr
c120: 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  ocName = null;..
c130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
c140: 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75   (procName != nu
c150: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c160: 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d       utf8ProcNam
c170: 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
c180: 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70  .UTF8.GetBytes(p
c190: 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  rocName + '\0');
c1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c1b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c1c0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
c1d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c1e0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
c1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c200: 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e   _sql, utf8FileN
c210: 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d  ame, utf8ProcNam
c220: 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d  e, ref pError);.
c230: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
c240: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c250: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
c270: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c280: 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f  eption(n, UTF8To
c290: 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d  String(pError, -
c2a0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  1));..        }.
c2b0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
c2c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c2d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72           if (pEr
c2e0: 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ror != IntPtr.Ze
c2f0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
c300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c310: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c320: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c330: 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20  free(pError);.. 
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
c350: 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
c360: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
c370: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
c380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
c390: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
c3a0: 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65  bled extended re
c3b0: 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72  sult codes retur
c3c0: 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20  ned by SQLite.. 
c3d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c3e0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74  ride void SetExt
c3f0: 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73  endedResultCodes
c400: 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
c410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
c420: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
c430: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c440: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
c450: 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
c460: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  s(..          _s
c470: 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31  ql, (bOnOff ? -1
c480: 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20   : 0));....     
c490: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
c4a0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
c4b0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c4c0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c4d0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c4e0: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73   }..    /// Gets
c4f0: 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65   the last SQLite
c500: 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20   error code..   
c510: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c520: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
c530: 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  de ResultCode().
c540: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
c550: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c560: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c570: 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
c580: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
c590: 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51  Gets the last SQ
c5a0: 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72  Lite extended er
c5b0: 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
c5c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c5d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c5e0: 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
c5f0: 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
c600: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
c610: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c620: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
c630: 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
c640: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
c650: 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
c660: 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
c670: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
c680: 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74  erface...    int
c690: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c6a0: 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 69  oid LogMessage(i
c6b0: 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72  nt iErrCode, str
c6c0: 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20  ing zMessage).. 
c6d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
c6e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c6f0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72  sqlite3_log(iErr
c700: 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65  Code, ToUTF8(zMe
c710: 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  ssage));..    }.
c720: 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43  ...#if INTEROP_C
c730: 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ODEC..    intern
c740: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c750: 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74   SetPassword(byt
c760: 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65  e[] passwordByte
c770: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
c780: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c790: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c7a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c7b0: 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77  _key(_sql, passw
c7c0: 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f  ordBytes, passwo
c7d0: 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
c7e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
c7f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c800: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
c810: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c820: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
c830: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c840: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c850: 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
c860: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
c870: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
c880: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
c890: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
c8a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
c8b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
c8c0: 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73  key(_sql, newPas
c8d0: 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77  swordBytes, (new
c8e0: 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d  PasswordBytes ==
c8f0: 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77   null) ? 0 : new
c900: 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  PasswordBytes.Le
c910: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
c920: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c930: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c940: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c950: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c960: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
c970: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
c980: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c990: 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
c9a0: 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
c9b0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
c9c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
c9d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c9e0: 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  .sqlite3_update_
c9f0: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
ca00: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
ca10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ca20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
ca30: 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f  oid SetCommitHoo
ca40: 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61  k(SQLiteCommitCa
ca50: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
ca60: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
ca70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ca80: 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
ca90: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
caa0: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
cab0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cac0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
cad0: 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
cae0: 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
caf0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
cb00: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
cb10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
cb20: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71  qlite3_trace(_sq
cb30: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
cb40: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
cb50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
cb60: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52  erride void SetR
cb70: 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69  ollbackHook(SQLi
cb80: 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  teRollbackCallba
cb90: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
cba0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
cbb0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cbc0: 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b  e3_rollback_hook
cbd0: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
cbe0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
cbf0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
cc00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
cc10: 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69  Allows the setti
cc20: 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20  ng of a logging 
cc30: 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64  callback invoked
cc40: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
cc50: 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65  a..    /// log e
cc60: 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e  vent occurs.  On
cc70: 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20  ly one callback 
cc80: 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20  may be set.  If 
cc90: 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d  NULL is passed,.
cca0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67  .    /// the log
ccb0: 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ging callback is
ccc0: 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a   unregistered...
ccd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
cce0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
ccf0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54  am name="func">T
cd00: 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
cd10: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c  tion to invoke.<
cd20: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
cd30: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
cd40: 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
cd50: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
cd60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cd70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
cd80: 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
cd90: 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63  SQLiteLogCallbac
cda0: 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
cdb0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
cdc0: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
cdd0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cde0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
cdf0: 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  log(..          
ce00: 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
ce10: 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
ce20: 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49  FIG_LOG, func, I
ce30: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
ce40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
ce50: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
ce60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ceb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cec0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
ced0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
cee0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c  reates a new SQL
cef0: 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ite backup objec
cf00: 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70  t based on the p
cf10: 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74  rovided destinat
cf20: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
cf30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cf40: 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61  .  The source da
cf50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
cf60: 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20  n is the one..  
cf70: 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
cf80: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
cf90: 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61  t.  The source a
cfa0: 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  nd destination d
cfb0: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
cfc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e   connections can
cfd0: 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e  not be the same.
cfe0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
cff0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
d000: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43  aram name="destC
d010: 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  nn">The destinat
d020: 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ion database con
d030: 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
d040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d050: 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22   name="destName"
d060: 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
d070: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
d080: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
d090: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
d0a0: 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f  urceName">The so
d0b0: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61  urce database na
d0c0: 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
d0d0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
d0e0: 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
d0f0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f  backup object.</
d100: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
d110: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d120: 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69  SQLiteBackup Ini
d130: 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a  tializeBackup(..
d140: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
d150: 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e  nnection destCnn
d160: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
d170: 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20  g destName,..   
d180: 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72       string sour
d190: 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  ceName..        
d1a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d1b0: 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d    if (destCnn ==
d1c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d1d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d1e0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
d1f0: 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d  ion("destCnn");.
d200: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
d210: 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  estName == null)
d220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
d230: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
d240: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
d250: 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  estName");....  
d260: 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
d270: 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
d280: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d290: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
d2a0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72  lException("sour
d2b0: 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  ceName");....   
d2c0: 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73       SQLite3 des
d2d0: 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43  tSqlite3 = destC
d2e0: 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74  nn._sql as SQLit
d2f0: 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e3;....        i
d300: 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d  f (destSqlite3 =
d310: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d320: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
d330: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
d340: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d350: 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
d360: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e  connection has n
d370: 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20  o wrapper.",..  
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
d390: 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
d3a0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
d3b0: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74  ctionHandle dest
d3c0: 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c  Handle = destSql
d3d0: 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  ite3._sql;....  
d3e0: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48 61        if (destHa
d3f0: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
d400: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d410: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
d420: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
d430: 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
d440: 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
d450: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
d460: 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20  handle.",..     
d470: 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74             "dest
d480: 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
d490: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
d4a0: 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48  onHandle sourceH
d4b0: 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d  andle = _sql;...
d4c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
d4d0: 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  rceHandle == nul
d4e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d4f0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
d500: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
d510: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
d520: 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f        "Source co
d530: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
d540: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
d550: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79  );....        by
d560: 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d  te[] zDestName =
d570: 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65   ToUTF8(destName
d580: 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  );..        byte
d590: 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d  [] zSourceName =
d5a0: 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61   ToUTF8(sourceNa
d5b0: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
d5c0: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
d5d0: 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20  le backupHandle 
d5e0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
d5f0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
d600: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
d610: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
d620: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d630: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
d640: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
d650: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
d660: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d670: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
d680: 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e  backup = UnsafeN
d690: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d6a0: 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
d6b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d6c0: 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a     destHandle, z
d6d0: 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
d6e0: 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e  Handle, zSourceN
d6f0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
d700: 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
d710: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
d720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d730: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d740: 65 45 78 63 65 70 74 69 6f 6e 28 52 65 73 75 6c  eException(Resul
d750: 74 43 6f 64 65 28 29 2c 20 47 65 74 4c 61 73 74  tCode(), GetLast
d760: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
d770: 20 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 48           backupH
d780: 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
d790: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64  teBackupHandle(d
d7a0: 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75  estHandle, backu
d7b0: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  p);..        }..
d7c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
d7d0: 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75   new SQLiteBacku
d7e0: 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p(..            
d7f0: 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e 64  this, backupHand
d800: 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20  le, destHandle, 
d810: 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63  zDestName, sourc
d820: 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20  eHandle,..      
d830: 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d        zSourceNam
d840: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
d850: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d860: 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20  .    /// Copies 
d870: 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72  up to N pages fr
d880: 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  om the source da
d890: 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65  tabase to the de
d8a0: 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
d8b0: 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  // database asso
d8c0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
d8d0: 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
d8e0: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
d8f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d900: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d910: 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
d920: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
d930: 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  use.</param>..  
d940: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d950: 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20  e="nPage">..    
d960: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
d970: 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c  f pages to copy,
d980: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70   negative to cop
d990: 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  y all remaining 
d9a0: 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  pages...    /// 
d9b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
d9c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
d9d0: 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etry">..    /// 
d9e0: 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20 74  Set to true if t
d9f0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65  he operation nee
da00: 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 64  ds to be retried
da10: 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73 65   due to database
da20: 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e  ..    /// lockin
da30: 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77  g issues; otherw
da40: 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73  ise, set to fals
da50: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
da60: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
da70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
da80: 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61   True if there a
da90: 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f  re more pages to
daa0: 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73   be copied, fals
dab0: 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20  e otherwise...  
dac0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
dad0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dae0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65  verride bool Ste
daf0: 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  pBackup(..      
db00: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
db10: 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20  ackup,..        
db20: 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20  int nPage,..    
db30: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74      out bool ret
db40: 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ry..        ).. 
db50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
db60: 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  try = false;....
db70: 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
db80: 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
db90: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
dba0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
dbb0: 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
dbc0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
dbd0: 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
dbe0: 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
dbf0: 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
dc00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
dc10: 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
dc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
dc30: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
dc40: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
dc50: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
dc60: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
dc70: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
dc80: 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
dc90: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
dca0: 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
dcb0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
dcc0: 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
dcd0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
dce0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
dcf0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
dd00: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
dd20: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
dd30: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
dd40: 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
dd50: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
dd60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
dd70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dd80: 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
dd90: 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74 72  p_step(handlePtr
dda0: 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20  , nPage);..     
ddb0: 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52     backup._stepR
ddc0: 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f  esult = n; /* NO
ddd0: 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65  TE: Save for use
dde0: 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70   by FinishBackup
ddf0: 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
de00: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
de10: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
de20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
de30: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
de40: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
de50: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
de60: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
de70: 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20  ode.Busy)..     
de80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
de90: 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d    retry = true;.
dea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
deb0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
dec0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
ded0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
dee0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
def0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ed)..        {..
df00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
df10: 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
df20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
df30: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
df40: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
df50: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
df60: 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20  rCode.Done)..   
df70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
df80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
df90: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
dfa0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
dfb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
dfc0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
dfd0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
dfe0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
dff0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e000: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e010: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e020: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
e030: 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d  ber of pages rem
e040: 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70  aining to be cop
e050: 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75  ied from the sou
e060: 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  rce..    /// dat
e070: 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73  abase to the des
e080: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
e090: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
e0a0: 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d  h the specified.
e0b0: 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20  .    /// backup 
e0c0: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
e0d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e0e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e0f0: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
e100: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
e110: 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
e120: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
e130: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  The number of pa
e140: 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
e150: 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74   be copied.</ret
e160: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
e170: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
e180: 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70   RemainingBackup
e190: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
e1a0: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
e1b0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
e1c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
e1d0: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
e1e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e1f0: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
e200: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
e210: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
e220: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
e230: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
e240: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
e250: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
e260: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
e270: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e280: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
e290: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
e2a0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
e2b0: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
e2c0: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
e2d0: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
e2e0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
e2f0: 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
e300: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
e310: 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
e320: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
e330: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e340: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
e350: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
e360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e370: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
e380: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
e390: 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
e3a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
e3b0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
e3c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e3d0: 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67  backup_remaining
e3e0: 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20  (handlePtr);..  
e3f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
e400: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e410: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f  / Returns the to
e420: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
e430: 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
e440: 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  e database assoc
e450: 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77  iated..    /// w
e460: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
e470: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
e480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
e490: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
e4a0: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
e4b0: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
e4c0: 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ject to check.</
e4d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
e4e0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74  <returns>The tot
e4f0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  al number of pag
e500: 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65  es in the source
e510: 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75   database.</retu
e520: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
e530: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
e540: 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28  PageCountBackup(
e550: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e560: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
e570: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
e580: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
e590: 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
e5a0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e5b0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
e5c0: 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
e5d0: 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
e5e0: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
e5f0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
e600: 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
e610: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
e620: 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
e630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e640: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
e650: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
e660: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
e670: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
e680: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
e690: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
e6a0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
e6b0: 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
e6c0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
e6d0: 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
e6e0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
e6f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e700: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
e710: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
e740: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
e750: 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
e760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
e770: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
e780: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e790: 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28  ackup_pagecount(
e7a0: 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20  handlePtr);..   
e7b0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e7c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e7d0: 20 44 65 73 74 72 6f 79 73 20 74 68 65 20 62 61   Destroys the ba
e7e0: 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c  ckup object, rol
e7f0: 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61  ling back any ba
e800: 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62 65  ckup that may be
e810: 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f   in..    /// pro
e820: 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  gess...    /// <
e830: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
e840: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e850: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
e860: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73  up object to des
e870: 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  troy.</param>.. 
e880: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e890: 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73 68  ride void Finish
e8a0: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
e8b0: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
e8c0: 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
e8d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e8e0: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
e8f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e900: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
e910: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
e920: 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
e930: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
e940: 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
e950: 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
e960: 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
e970: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
e980: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e990: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e9a0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
e9b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
e9d0: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
e9e0: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
e9f0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
ea00: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
ea10: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
ea20: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
ea30: 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
ea40: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
ea50: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
ea60: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
ea70: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
ea80: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
ea90: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
eaa0: 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
eab0: 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
eac0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ead0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
eae0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
eaf0: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
eb00: 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20  (handlePtr);..  
eb10: 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65 74        handle.Set
eb20: 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64 28  HandleAsInvalid(
eb30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
eb40: 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72   ((n != SQLiteEr
eb50: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
eb60: 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n != backup._ste
eb70: 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  pResult))..     
eb80: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
eb90: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
eba0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
ebb0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
ebc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ebd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec20: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
ec30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ec40: 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
ec50: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
ec60: 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
ec70: 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
ec80: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
ec90: 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
eca0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ecb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
ecc0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
ecd0: 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
ece0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
ecf0: 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
ed00: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
ed10: 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
ed20: 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
ed30: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
ed40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
ed50: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
ed60: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
ed70: 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29   IsInitialized()
ed80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ed90: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73   return StaticIs
eda0: 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a  Initialized();..
edb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
edc0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
edd0: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
ede0: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
edf0: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
ee00: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
ee10: 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
ee20: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
ee30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
ee40: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
ee50: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
ee60: 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
ee70: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
ee80: 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
ee90: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
eea0: 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
eeb0: 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
eec0: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
eed0: 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
eee0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
eef0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f  ernal static boo
ef00: 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  l StaticIsInitia
ef10: 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
ef20: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ef30: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50      // BUGFIX: P
ef40: 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74  revent races wit
ef50: 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20  h other threads 
ef60: 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20  for this entire 
ef70: 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20  block, due..    
ef80: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74      //         t
ef90: 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c  o the try/finall
efa0: 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65  y semantics.  Se
efb0: 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63  e ticket [72905c
efc0: 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20  9a77]...        
efd0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  //..        lock
efe0: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
eff0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
f000: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
f010: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
f020: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
f030: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76      // NOTE: Sav
f040: 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  e the state of t
f050: 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73  he logging class
f060: 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72   and then restor
f070: 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  e it..          
f080: 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72    //       after
f090: 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20   we are done to 
f0a0: 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f  avoid logging to
f0b0: 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72  o many false err
f0c0: 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ors...          
f0d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
f0e0: 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62    bool savedEnab
f0f0: 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e  led = SQLiteLog.
f100: 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
f110: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
f120: 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b  Enabled = false;
f130: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f140: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
f150: 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   {..#endif..    
f160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65  // NOTE: This me
f190: 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68  thod [ab]uses th
f1a0: 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
f1b0: 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a  te will always..
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  //       return 
f1e0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72  SQLITE_ERROR for
f1f0: 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e   any unknown con
f200: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
f210: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
f220: 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c     //       *unl
f230: 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20  ess* the SQLite 
f240: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
f250: 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
f260: 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ized...         
f270: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f280: 49 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20  In that case it 
f290: 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75  will always retu
f2a0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
f2b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f2c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
f2d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
f2e0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
f2f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f300: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e  sqlite3_config_n
f310: 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  one(..          
f320: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f330: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
f340: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45  LITE_CONFIG_NONE
f350: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63        return (rc
f370: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
f380: 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 23 69  ode.Misuse);..#i
f390: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
f3a0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
f3b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f3c0: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
f3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3f0: 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c   SQLiteLog.Enabl
f400: 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65  ed = savedEnable
f410: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
f420: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
f430: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
f440: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
f450: 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
f460: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
f470: 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
f480: 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
f490: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
f4a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f4b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f4c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
f4d0: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
f4e0: 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
f4f0: 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
f500: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
f510: 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63  me="index">The c
f520: 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72  olumn index to r
f530: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
f540: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f550: 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
f560: 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74  ype of data cont
f570: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
f580: 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69  umn.  If Uniniti
f590: 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e  alized, this fun
f5a0: 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69  ction will retri
f5b0: 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65  eve the datatype
f5c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
f5d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f5e0: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
f5f0: 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
f600: 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
f610: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f620: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
f630: 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74  etValue(SQLiteSt
f640: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
f650: 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
f660: 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
f670: 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c  .      if (IsNul
f680: 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20  l(stmt, index)) 
f690: 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
f6a0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
f6b0: 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74  Affinity aff = t
f6c0: 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20  yp.Affinity;..  
f6d0: 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
f6e0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
f6f0: 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
f700: 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
f710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
f720: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
f730: 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
f740: 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
f750: 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
f760: 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
f770: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
f780: 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d   (aff)..      {.
f790: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
f7a0: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
f7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
f7c0: 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
f7d0: 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41  pe.Guid && typ.A
f7e0: 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
f7f0: 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20  ffinity.Text).. 
f800: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f810: 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65  n new Guid(GetTe
f820: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  xt(stmt, index))
f830: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
f840: 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42  nt n = (int)GetB
f850: 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
f860: 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29  , 0, null, 0, 0)
f870: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74  ;..          byt
f880: 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65  e[] b = new byte
f890: 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  [n];..          
f8a0: 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
f8b0: 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e  ndex, 0, b, 0, n
f8c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f8d0: 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
f8e0: 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e  DbType.Guid && n
f8f0: 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20   == 16)..       
f900: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
f910: 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20  Guid(b);....    
f920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d        return b;.
f930: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
f940: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
f950: 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ime:..          
f960: 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69  return GetDateTi
f970: 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  me(stmt, index);
f980: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
f990: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
f9a0: 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  le:..          i
f9b0: 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
f9c0: 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
f9d0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
f9e0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
f9f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
fa00: 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
fa10: 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ype(GetDouble(st
fa20: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
fa30: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  ull);..        c
fa40: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
fa50: 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
fa60: 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
fa70: 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
fa80: 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
fa90: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
faa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
fab0: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
fac0: 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28  geType(GetInt64(
fad0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
fae0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
faf0: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
fb00: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
fb10: 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
fb20: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
fb30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fb40: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
fb50: 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
fb60: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fb70: 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69   stmt, int db, i
fb80: 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20  nt rootPage)..  
fb90: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
fba0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
fbb0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
fbc0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fbd0: 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72  te3_table_cursor
fbe0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
fbf0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20  qlite_stmt, db, 
fc00: 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73  rootPage);..#els
fc10: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
fc20: 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  -1;..#endif..   
fc30: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
fc40: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
fc50: 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73   GetRowIdForCurs
fc60: 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  or(SQLiteStateme
fc70: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72  nt stmt, int cur
fc80: 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  sor)..    {..#if
fc90: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
fca0: 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  D..      long ro
fcb0: 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  wid;..      SQLi
fcc0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
fcd0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fce0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72  hods.sqlite3_cur
fcf0: 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  sor_rowid_intero
fd00: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
fd10: 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74  tmt, cursor, out
fd20: 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20   rowid);..      
fd30: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
fd40: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65  ErrorCode.Ok) re
fd50: 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
fd60: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
fd70: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
fd80: 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
fd90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
fda0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
fdb0: 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
fdc0: 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
fdd0: 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
fde0: 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
fdf0: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
fe00: 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   int sortMode, o
fe10: 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ut int onError, 
fe20: 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
fe30: 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
fe40: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
fe50: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
fe60: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a    IntPtr coll;..
fe70: 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
fe80: 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  n;..      SQLite
fe90: 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d  ErrorCode rc;...
fea0: 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61  .      rc = Unsa
feb0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fec0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
fed0: 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f  lumn_info_intero
fee0: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
fef0: 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38  atabase), ToUTF8
ff00: 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28  (index), ToUTF8(
ff10: 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72  column), out sor
ff20: 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72  tMode, out onErr
ff30: 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75  or, out coll, ou
ff40: 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20  t colllen);..   
ff50: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
ff60: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ff70: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
ff80: 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e  eException(rc, n
ff90: 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63  ull);....      c
ffa0: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
ffb0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
ffc0: 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  coll, colllen);.
ffd0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f  .#else..      so
ffe0: 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20  rtMode = 0;..   
fff0: 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d     onError = 2;.
10000 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e  .      collation
10010 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41  Sequence = "BINA
10020 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  RY";..#endif..  
10030 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10040 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
10050 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
10060 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20  eControl(string 
10070 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c  zDbName, int op,
10080 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20   IntPtr pArg).. 
10090 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
100a0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
100b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
100c0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c  ile_control(_sql
100d0 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75  , (zDbName != nu
100e0 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62  ll) ? ToUTF8(zDb
100f0 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70  Name) : null, op
10100 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d  , pArg);..    }.
10110 0a 20 20 7d 0d 0a 7d 0d 0a                       .  }..}..