System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6d2ef324fb111d6cba5701259e5a906dae9e216f:


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 49      {..        I
2490: 6e 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20  ntPtr db;..     
24a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
24b0: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
24c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
24d0: 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e         if ((conn
24e0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51  ectionFlags & SQ
24f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2500: 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46  ags.NoExtensionF
2510: 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c  unctions) != SQL
2520: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2530: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
2540: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
2550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e    {..          n
2560: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2570: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
2580: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
2590: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
25a0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20   openFlags, out 
25b0: 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  db);..        }.
25c0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23  .        else..#
25d0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
25e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
25f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2600: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
2610: 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69  _v2(ToUTF8(strFi
2620: 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c  lename), out db,
2630: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50   openFlags, IntP
2640: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20  tr.Zero);..     
2650: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54     }....#if !NET
2660: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
2670: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
2680: 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57  .        Trace.W
2690: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
26a0: 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30  Format("Open: {0
26b0: 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69  }", db));..#endi
26c0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
26d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
26e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
26f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
2700: 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  ion(n, null);...
2710: 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20  .        _sql = 
2720: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
2730: 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 29 3b 0d  tionHandle(db);.
2740: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  .        lock (_
2750: 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20  sql) { /* HACK: 
2760: 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c  Force the SyncBl
2770: 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74  ock to be "creat
2780: 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20  ed" now. */ }.. 
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f       }..      //
27a0: 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20   Bind functions 
27b0: 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  to this connecti
27c0: 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76  on.  If any prev
27d0: 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  ious functions o
27e0: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d  f the same name.
27f0: 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61  .      // were a
2800: 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68  lready bound, th
2810: 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69  en the new bindi
2820: 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20  ngs replace the 
2830: 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e  old...      _fun
2840: 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51  ctionsArray = SQ
2850: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e  LiteFunction.Bin
2860: 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c  dFunctions(this,
2870: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
2880: 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d  );..      SetTim
2890: 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20  eout(0);..      
28a0: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71  GC.KeepAlive(_sq
28b0: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
28c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
28d0: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
28e0: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
28f0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2900: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
2910: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
2920: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2930: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
2940: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20  t CountPool().. 
2950: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
2960: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
2970: 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e   int> counts = n
2980: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  ull;..        in
2990: 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b  t openCount = 0;
29a0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c  ..        int cl
29b0: 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  oseCount = 0;.. 
29c0: 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c         int total
29d0: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Count = 0;....  
29e0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
29f0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f  ectionPool.GetCo
2a00: 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d  unts(_fileName,.
2a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2a20: 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65   counts, ref ope
2a30: 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73  nCount, ref clos
2a40: 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  eCount,..       
2a50: 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f       ref totalCo
2a60: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
2a70: 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75   return totalCou
2a80: 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  nt;..    }....  
2a90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2aa0: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
2ab0: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
2ac0: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
2ad0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2ae0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
2af0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2b00: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f  3_busy_timeout(_
2b10: 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29  sql, nTimeoutMS)
2b20: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
2b30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
2b40: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
2b50: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
2b60: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
2b70: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2b80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2b90: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  ide bool Step(SQ
2ba0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2bb0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
2bc0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2bd0: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  e n;..      Rand
2be0: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
2bf0: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
2c00: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
2c10: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2c20: 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  nt;..      uint 
2c30: 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29  timeout = (uint)
2c40: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
2c50: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
2c60: 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   1000);....     
2c70: 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
2c80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2ca0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2cb0: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
2cc0: 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  e_stmt);....    
2cd0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
2ce0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
2cf0: 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ) return true;..
2d00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
2d10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2d20: 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61  .Done) return fa
2d30: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2d40: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
2d50: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
2d60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
2d80: 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de r;....       
2d90: 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f     // An error o
2da0: 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74  ccurred, attempt
2db0: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
2dc0: 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  atement.  If the
2dd0: 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65   reset worked be
2de0: 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  cause the..     
2df0: 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68       // schema h
2e00: 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74  as changed, re-t
2e10: 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69  ry the step agai
2e20: 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65  n.  If it errore
2e30: 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68  d our because th
2e40: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
2e50: 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b        // is lock
2e60: 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65  ed, then keep re
2e70: 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65  trying until the
2e80: 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74   command timeout
2e90: 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
2ea0: 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74      r = Reset(st
2eb0: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
2ec0: 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74    if (r == SQLit
2ed0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2ef0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2f00: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
2f10: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
2f20: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
2f30: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
2f40: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
2f50: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
2f60: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74  Code.Busy) && st
2f70: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  mt._command != n
2f80: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
2fa0: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
2fb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2fc0: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
2fd0: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
2fe0: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
2ff0: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
3000: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
3010: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
3020: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
3030: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
3040: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
3050: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
3060: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
3070: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
3080: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
3090: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
30a0: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
30b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
30e0: 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74  Exception(r, Get
30f0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
3100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3110: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
3120: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3140: 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20  Otherwise sleep 
3150: 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f  for a random amo
3160: 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74  unt of time up t
3170: 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20  o 150ms..       
3180: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68         System.Th
3190: 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53  reading.Thread.S
31a0: 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c  leep(rnd.Next(1,
31b0: 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   150));..       
31c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
31e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
31f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3200: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
3210: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
3220: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3230: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3240: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
3250: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
3260: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
3270: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
3280: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3290: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
32a0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
32b0: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
32c0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
32d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
32e0: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
32f0: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
3300: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
3310: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
3320: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
3330: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
3340: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
3350: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
3360: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
3370: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
3380: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
3390: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
33a0: 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20  string str;..   
33b0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
33c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
33d0: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
33e0: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
33f0: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
3400: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
3410: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
3420: 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72 29   1000), out str)
3430: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3440: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
3450: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
3460: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
3470: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
3480: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
3490: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
34a0: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
34b0: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
34c0: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
34d0: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
34e0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
34f0: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ne..          st
3500: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mt._sqlite_stmt 
3510: 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74  = tmp._sqlite_st
3520: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  mt;..          t
3530: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mp._sqlite_stmt 
3540: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
3550: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
3560: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
3570: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
3580: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
3590: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35a0: 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74 65 45   return (SQLiteE
35b0: 72 72 6f 72 43 6f 64 65 29 28 2d 31 29 3b 20 2f  rrorCode)(-1); /
35c0: 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20  / Reset was OK, 
35d0: 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e  with schema chan
35e0: 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ge..      }..   
35f0: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
3600: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3610: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
3620: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3630: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72  Busy)..        r
3640: 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20  eturn n;....    
3650: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
3660: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
3670: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3680: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
3690: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
36a0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  r());....      r
36b0: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
36c0: 72 43 6f 64 65 2e 4f 6b 3b 20 2f 2f 20 57 65 20  rCode.Ok; // We 
36d0: 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68  reset OK, no sch
36e0: 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20  ema changes..   
36f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3700: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
3710: 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ng GetLastError(
3720: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3730: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61 73  return SQLiteBas
3740: 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f  e.GetLastError(_
3750: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
3760: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3770: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
3780: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
3790: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
37a0: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
37b0: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
37c0: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
37d0: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
37e0: 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74  S, out string st
37f0: 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d  rRemain)..    {.
3800: 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69  .      if (!Stri
3810: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
3820: 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20  (strSql))..     
3830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
3840: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3850: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
3860: 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e   support the con
3870: 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74 65  cept of separate
3880: 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20   schemas..      
3890: 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e    //       in on
38a0: 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65 72  e database; ther
38b0: 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68  efore, remove th
38c0: 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61  e base schema na
38d0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  me..        //  
38e0: 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f       used to smo
38f0: 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20  oth integration 
3900: 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e  with the base .N
3910: 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20  ET Framework..  
3920: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
3930: 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20  ata classes...  
3940: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3950: 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63 68    string baseSch
3960: 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21  emaName = (cnn !
3970: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62  = null) ? cnn._b
3980: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20  aseSchemaName : 
3990: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
39a0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
39b0: 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53  ullOrEmpty(baseS
39c0: 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20  chemaName))..   
39d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
39e0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
39f0: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
3a00: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
3a10: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
3a20: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
3a30: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
3a40: 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62       "[{0}].", b
3a50: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
3a60: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
3a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
3a80: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
3a90: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
3aa0: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
3ab0: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
3ac0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
3ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
3ae0: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
3af0: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
3b00: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
3b10: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
3b20: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3b30: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
3b40: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
3b50: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
3b60: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
3b70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
3b80: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 21  efault;....#if !
3b90: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
3ba0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
3bb0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
3bc0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3bd0: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20  ags.LogPrepare) 
3be0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
3bf0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
3c00: 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  are)..      {.. 
3c10: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73 74           if ((st
3c20: 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  rSql == null) ||
3c30: 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20   (strSql.Length 
3c40: 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71 6c  == 0) || (strSql
3c50: 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d  .Trim().Length =
3c60: 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20  = 0))..         
3c70: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
3c80: 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70 61  ogMessage("Prepa
3c90: 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d  ring {<nothing>}
3ca0: 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ...");..        
3cb0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
3cc0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
3cd0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
3ce0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
3d00: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
3d10: 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72  Culture, "Prepar
3d20: 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c  ing {{{0}}}...",
3d30: 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20   strSql));..    
3d40: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
3d50: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
3d60: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
3d70: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
3d80: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
3d90: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
3da0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
3db0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
3dc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3dd0: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
3de0: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
3df0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
3e00: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
3e10: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
3e20: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
3e30: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
3e40: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
3e50: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
3e60: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
3e70: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
3e80: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
3e90: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
3ea0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61  t;....      GCHa
3eb0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43  ndle handle = GC
3ec0: 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20  Handle.Alloc(b, 
3ed0: 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e  GCHandleType.Pin
3ee0: 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ned);..      Int
3ef0: 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c  Ptr psql = handl
3f00: 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62  e.AddrOfPinnedOb
3f10: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 74  ject();..      t
3f20: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
3f30: 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d       while ((n =
3f40: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3f50: 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d  e.Schema || n ==
3f60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3f70: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
3f80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3f90: 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73  Busy) && retries
3fa0: 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b   < 3)..        {
3fb0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
3fc0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
3fd0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
3fe0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ff0: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
4000: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
4010: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
4020: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f  stmt, out ptr, o
4030: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
4040: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55  .          n = U
4050: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4060: 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ds.sqlite3_prepa
4070: 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  re(_sql, psql, b
4080: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
4090: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
40a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20  ..          len 
40b0: 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  = -1;..#endif...
40c0: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
40d0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54  T_20 && TRACE_ST
40e0: 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20  ATEMENT..       
40f0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
4100: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
4110: 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a  ("Prepare ({0}):
4120: 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29   {1}", n, stmt))
4130: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
4140: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
4150: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4160: 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20  Schema)..       
4170: 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d       retries++;.
4180: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
4190: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
41a0: 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d  rrorCode.Error).
41b0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
41c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
41d0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
41e0: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65  LastError(), "ne
41f0: 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79  ar \"TYPES\": sy
4200: 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72  ntax error", Str
4210: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
4220: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
4230: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
4240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4250: 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73       int pos = s
4260: 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b  trSql.IndexOf(';
4270: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
4280: 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31     if (pos == -1
4290: 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c  ) pos = strSql.L
42a0: 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20  ength - 1;....  
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
42c0: 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75  defs = strSql.Su
42d0: 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b  bstring(0, pos +
42e0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
42f0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
4300: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f  Sql.Substring(po
4310: 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  s + 1);....     
4320: 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61           strRema
4330: 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20  in = "";....    
4340: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
4350: 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  (cmd == null && 
4360: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20  strSql.Length > 
4370: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4390: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
43a0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
43b0: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
43c0: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
43d0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
43e0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
43f0: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
4400: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4410: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4420: 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  cmd != null)..  
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
4440: 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64  d.SetTypes(typed
4450: 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  efs);....       
4460: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
4470: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
4480: 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c  }..#if (NET_35 |
4490: 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f  | NET_40 || NET_
44a0: 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  45) && !PLATFORM
44b0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
44c0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  K..            e
44d0: 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e  lse if (_buildin
44e0: 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65  gSchema == false
44f0: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
4500: 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  re(GetLastError(
4510: 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74  ), 0, "no such t
4520: 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d  able: TEMP.SCHEM
4530: 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e  A", 0, 26, Strin
4540: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
4550: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
4560: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
4570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4580: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
4590: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
45a0: 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d    _buildingSchem
45b0: 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  a = true;..     
45c0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
45f0: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
4600: 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49  nsions ext = ((I
4610: 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 29  ServiceProvider)
4620: 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e  SQLiteFactory.In
4630: 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69  stance).GetServi
4640: 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74  ce(typeof(ISQLit
4650: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
4660: 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53 63  s)) as ISQLiteSc
4670: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d  hemaExtensions;.
4680: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4690: 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75     if (ext != nu
46a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
46b0: 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64         ext.Build
46c0: 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b  TempSchema(cnn);
46d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
46e0: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
46f0: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
4700: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4730: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
4740: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
4750: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
4760: 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e  S, out strRemain
4770: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4780: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
4790: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
47a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
47d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
47f0: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
4800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4810: 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53        _buildingS
4820: 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a  chema = false;..
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4850: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
4870: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
4880: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
4890: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
48a0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
48b0: 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64  ) // Locked -- d
48c0: 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  elay a small amo
48d0: 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72 79  unt before retry
48e0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ing..          {
48f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4900: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
4910: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
4920: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
4930: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
4940: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
4950: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
4960: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
4970: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
4980: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
4990: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
49a0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
49b0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
49c0: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
49d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
49e0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
49f0: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
4a00: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d  ttick > timeoutM
4a10: 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  S)..            
4a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4a30: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
4a40: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
4a50: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4a70: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
4a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4aa0: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
4ab0: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
4ac0: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
4ad0: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
4ae0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
4af0: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
4b00: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
4b10: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
4b20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4b30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4b40: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
4b50: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
4b60: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
4b70: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4b80: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
4b90: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
4ba0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
4bb0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
4bc0: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
4bd0: 69 66 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  if (stmt != IntP
4be0: 74 72 2e 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e  tr.Zero) cmd = n
4bf0: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
4c00: 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20  nt(this, flags, 
4c10: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
4c20: 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20  entHandle(_sql, 
4c30: 73 74 6d 74 29 2c 20 73 74 72 53 71 6c 2e 53 75  stmt), strSql.Su
4c40: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
4c50: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
4c60: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
4c70: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
4c80: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
4c90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
4ca0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
4cb0: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
4cc0: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
4cd0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  }..    }....#if 
4ce0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
4cf0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
4d00: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
4d10: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
4d20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
4d30: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
4d40: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
4d50: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
4d60: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
4d70: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
4d80: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
4d90: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
4da0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4db0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
4dc0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
4dd0: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
4de0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
4df0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
4e00: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
4e10: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
4e20: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
4e30: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
4e40: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
4e50: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
4e60: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
4e70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
4e80: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
4e90: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
4ea0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
4eb0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
4ec0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4ed0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
4ee0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
4ef0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
4f00: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
4f10: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
4f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
4f30: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
4f40: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
4f50: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
4f60: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
4f70: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
4f80: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
4f90: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
4fa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
4fb0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
4fc0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
4fd0: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
4fe0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
4ff0: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
5000: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
5010: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
5020: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
5030: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
5040: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
5050: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
5060: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
5070: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
5080: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
5090: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
50a0: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
50b0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
50c0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
50d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
50e0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
50f0: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5100: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5110: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
5120: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
5130: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5140: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
5150: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
5160: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
5170: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5180: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
5190: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
51a0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
51b0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
51c0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
51d0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
51e0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
51f0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
5200: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
5210: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
5220: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
5230: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5240: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5250: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5260: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5270: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
5280: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
5290: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
52a0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
52b0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
52c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
52d0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
52e0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
52f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5300: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5310: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5320: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5330: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5340: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5350: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5360: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
5370: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
5380: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
5390: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
53a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
53b0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
53c0: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
53d0: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
53e0: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
53f0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
5400: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
5410: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
5420: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5430: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5440: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
5450: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
5460: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
5470: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
5480: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
5490: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
54a0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
54b0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
54c0: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
54d0: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
54e0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
54f0: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
5500: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
5510: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
5520: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
5530: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
5540: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
5550: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
5560: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
5570: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
5580: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
5590: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
55a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
55b0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
55c0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
55d0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
55e0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
55f0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
5600: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5610: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5620: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5630: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
5640: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
5650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
5660: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
5670: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
5680: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
5690: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
56a0: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
56b0: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
56c0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
56d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
56e0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
56f0: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
5700: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5710: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5720: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5730: 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  ex, double value
5740: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5750: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
5760: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
5770: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
5780: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
5790: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
57a0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
57b0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
57c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
57d0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
57e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
57f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
5800: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5810: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
5820: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
5830: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
5840: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
5850: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
5860: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5870: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
5880: 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e  ouble(handle, in
5890: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
58a0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  lse..        SQL
58b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
58c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
58d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
58e0: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
58f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5900: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
5910: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
5920: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5930: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5940: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5950: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5960: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
5970: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5980: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
5990: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
59a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
59b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
59c0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
59d0: 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29  ndex, int value)
59e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
59f0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5a00: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5a10: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5a20: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5a30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5a40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5a50: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5a60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5a70: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5a80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5a90: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
5aa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ab0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
5ac0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5ad0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
5ae0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
5af0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5b00: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5b10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5b20: 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65  _bind_int(handle
5b30: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5b40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5b50: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5b60: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5b70: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5b80: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5b90: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
5ba0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5bb0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
5bc0: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
5bd0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5be0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5bf0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5c00: 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d  ex, uint value).
5c10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5c20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
5c30: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
5c40: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5c50: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
5c60: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5c70: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
5c80: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5c90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5ca0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
5cb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5cc0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
5cd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5ce0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
5cf0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
5d00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
5d10: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
5d20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5d30: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5d40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5d50: 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65  bind_uint(handle
5d60: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5d70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5d80: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5d90: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5da0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5db0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5dc0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
5dd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5de0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
5df0: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
5e00: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
5e10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e20: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
5e30: 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  x, long value)..
5e40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
5e50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
5e60: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
5e70: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
5e80: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
5e90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5ea0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
5eb0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
5ec0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5ed0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
5ee0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5ef0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
5f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5f10: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
5f20: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5f30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
5f40: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
5f50: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
5f60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5f70: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
5f80: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
5f90: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
5fa0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5fb0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5fc0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5fd0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
5fe0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
5ff0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
6000: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
6010: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
6020: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6030: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
6040: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6050: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6060: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6070: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6080: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
6090: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
60a0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
60b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
60c0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
60d0: 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  , ulong value)..
60e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
60f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6100: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6110: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6120: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6130: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6140: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6150: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6160: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6170: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6180: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6190: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
61a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
61b0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
61c0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
61d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
61e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
61f0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6200: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6210: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
6220: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
6230: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
6240: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6250: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6260: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6270: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
6280: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
6290: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
62a0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
62b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
62c0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
62d0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
62e0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
62f0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6300: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6310: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6320: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54  ride void Bind_T
6330: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
6340: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6350: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6360: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
6370: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
6380: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6390: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
63a0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
63b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
63c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
63d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
63e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
63f0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6400: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6410: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6430: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6450: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6460: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
6470: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
6480: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
6490: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
64a0: 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66  8(value);....#if
64b0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
64c0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
64d0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
64e0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
64f0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6500: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6510: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6520: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6530: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6540: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6550: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  , b);..        }
6560: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
6570: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
6580: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
6590: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
65a0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
65b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
65c0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
65d0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
65e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
65f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6600: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
6610: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
6620: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
6630: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6640: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6650: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
6660: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
6670: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6680: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6690: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
66a0: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
66b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
66c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
66d0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
66e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
66f0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6700: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6710: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6720: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6730: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6740: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6750: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6760: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6780: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6790: 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20  , index, dt);.. 
67a0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
67b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
67c0: 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  ch (_datetimeFor
67d0: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
67e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
67f0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
6800: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
6810: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
6840: 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66  dt.Ticks;....#if
6850: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6860: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6890: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
68a0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
68b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
68c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
6900: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
6910: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6940: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6950: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6980: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
6990: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
69a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
69b0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
69c0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
69d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
69e0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
69f0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
6a00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
6a10: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
6a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a30: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
6a40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6a50: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
6a60: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
6a70: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
6a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a90: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
6ac0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
6ad0: 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20  ts.JulianDay:.. 
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b00: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
6b10: 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79  ue = ToJulianDay
6b20: 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  (dt);....#if !PL
6b30: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6b40: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6b60: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6b70: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6b80: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6b90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6ba0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6bd0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6be0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6bf0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6c20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6c30: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
6c40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6c50: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
6c60: 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ble(handle, inde
6c70: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
6c80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6c90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6ca0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6cb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6cc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
6cd0: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
6ce0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
6cf0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6d20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6d30: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6d40: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
6d50: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d70: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
6d80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6d90: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
6da0: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
6db0: 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20  .UnixEpoch:..   
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6de0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
6df0: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34   Convert.ToInt64
6e00: 28 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69  (dt.Subtract(Uni
6e10: 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63  xEpoch).TotalSec
6e20: 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  onds);....#if !P
6e30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6e40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6e60: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
6e70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6e80: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
6e90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6ea0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
6ee0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
6ef0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6f20: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
6f30: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6f40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6f50: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
6f60: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
6f70: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
6f80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6f90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6fa0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6fb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6fc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
6fd0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
6fe0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
6ff0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7020: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7030: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7040: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
7050: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
7080: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7090: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
70a0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
70b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
70c0: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
70d0: 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b   b = ToUTF8(dt);
70e0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
70f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7100: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7110: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7120: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7130: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7140: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7150: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7160: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
7170: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7190: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
71a0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
71b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
71c0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
71d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
71e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
71f0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7200: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7210: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
7220: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7230: 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  b, b.Length - 1,
7240: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
7250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7260: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7270: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7280: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
7290: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
72a0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
72b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
72c0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
72e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
72f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7300: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
7310: 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53  ind_Blob(SQLiteS
7320: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7330: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7340: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
7350: 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c  index, byte[] bl
7360: 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a  obData)..    {..
7370: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
7380: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
7390: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
73a0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
73b0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
73c0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
73d0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
73e0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
73f0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7400: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7410: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7420: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
7430: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
7440: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
7450: 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20  , blobData);..  
7460: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7470: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
7480: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7490: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
74a0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
74b0: 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64  blob(handle, ind
74c0: 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c  ex, blobData, bl
74d0: 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28  obData.Length, (
74e0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
74f0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
7500: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7510: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7520: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7530: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
7540: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7550: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7560: 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c  e void Bind_Null
7570: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7580: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
7590: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
75a0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
75b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
75c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
75d0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
75e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
75f0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7600: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7610: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
7620: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7630: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7640: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7650: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7660: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7670: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7680: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
7690: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
76a0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
76b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
76c0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
76d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
76e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
76f0: 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  l(handle, index)
7700: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
7710: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7720: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7730: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7740: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
7750: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
7760: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7770: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
7780: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
7790: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
77a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
77b0: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
77c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
77d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
77e0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
77f0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
7800: 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75          int valu
7810: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
7820: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7830: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
7840: 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d  ount(handle);...
7850: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7860: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7870: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7880: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7890: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
78a0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
78b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
78c0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
78d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
78e0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
78f0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
7900: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7910: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
7920: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
7930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7940: 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20   "Statement {0} 
7950: 70 61 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69  paramter count i
7960: 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  s {1}.",..      
7970: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
7980: 49 6e 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b  IntPtr, value));
7990: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
79a0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  dif....        r
79b0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
79c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
79d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
79e0: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
79f0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
7a00: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
7a10: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
7a20: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
7a30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7a40: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7a50: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
7a60: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7a70: 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
7a80: 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
7a90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7aa0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
7ab0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  n;..        name
7ac0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
7ad0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7ae0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7af0: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
7b00: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
7b10: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
7b20: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
7b30: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
7b40: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7b50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7b60: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
7b70: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
7b80: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
7b90: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21  .#endif....#if !
7ba0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7bb0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7bc0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7bd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7be0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7bf0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7c00: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7c10: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7c20: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
7c30: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
7c40: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
7c50: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
7c60: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
7c70: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
7c80: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
7c90: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
7ca0: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
7cb0: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
7cd0: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
7ce0: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
7cf0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7d00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61         return na
7d10: 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me;..    }....  
7d20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7d30: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
7d40: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
7d50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
7d60: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7d70: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
7d80: 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20  g paramName)..  
7d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7da0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
7db0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
7dc0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
7dd0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
7de0: 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  x = UnsafeNative
7df0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7e00: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
7e10: 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55  ndex(handle, ToU
7e20: 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b  TF8(paramName));
7e30: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7e40: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7e50: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
7e60: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7e70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7e80: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7e90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7ea0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7eb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7ec0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
7ed0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
7ee0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
7ef0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
7f00: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
7f10: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7f20: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
7f30: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
7f40: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
7f50: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
7f70: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
7f80: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
7f90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
7fa0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
7fb0: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
7fc0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7fd0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
7fe0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
7ff0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8000: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8010: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
8020: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8030: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
8040: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8050: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
8060: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8070: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
8080: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
8090: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
80a0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
80b0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
80c0: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
80d0: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
80e0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
80f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8100: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8110: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
8120: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8130: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
8140: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
8150: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
8160: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
8170: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8180: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
8190: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
81a0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
81b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
81c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
81d0: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
81e0: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
81f0: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
8200: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
8210: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
8220: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
8230: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8240: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8250: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
8260: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
8270: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8280: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8290: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
82a0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
82b0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
82c0: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
82d0: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
82e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
82f0: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
8300: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8310: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
8320: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8330: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8340: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
8350: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
8360: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
8370: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
8380: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
8390: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
83a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
83b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
83c0: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
83d0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
83e0: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
83f0: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
8400: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
8410: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
8420: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
8430: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
8440: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
8450: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
8460: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
8470: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
8480: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
8490: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
84a0: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
84b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
84d0: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
84e0: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
84f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8500: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
8510: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
8520: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
8530: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
8540: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
8550: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
8560: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
8570: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
8580: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
8590: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
85a0: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
85b0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
85c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
85d0: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
85e0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
85f0: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
8600: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
8610: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
8620: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
8630: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
8640: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
8650: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
8660: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
8670: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
8680: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
8690: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
86a0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
86b0: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
86c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
86d0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
86e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
86f0: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
8700: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
8710: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
8720: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
8730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8740: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
8750: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
8760: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
8770: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
8780: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
8790: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
87a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
87b0: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
87c0: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
87d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
87e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
87f0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
8800: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
8810: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
8820: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
8830: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8840: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
8850: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
8860: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8870: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8890: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
88a0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
88b0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
88c0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
88d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
88e0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
88f0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8900: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8910: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
8920: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
8930: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
8940: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8950: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8960: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
8970: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
8980: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
8990: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
89a0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
89b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
89c0: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
89d0: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
89e0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
89f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8a00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8a10: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
8a20: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8a30: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
8a40: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
8a50: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8a60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8a70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8a80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8a90: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
8aa0: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
8ab0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
8ac0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8ad0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8ae0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
8af0: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
8b00: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
8b10: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
8b20: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
8b30: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8b40: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
8b50: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
8b60: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8b70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8b80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8b90: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
8ba0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
8bb0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
8bc0: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
8bd0: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
8be0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8bf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8c00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8c10: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
8c20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8c30: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8c40: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8c50: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8c60: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
8c70: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
8c80: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
8c90: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
8ca0: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
8cb0: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
8cc0: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
8cd0: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
8ce0: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
8cf0: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
8d00: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
8d10: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
8d20: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
8d30: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
8d40: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
8d50: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
8d60: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
8d70: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
8d80: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
8d90: 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  nc;..      SQLit
8da0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20  eErrorCode n;.. 
8db0: 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d       int dtLen;.
8dc0: 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e  .      int csLen
8dd0: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
8de0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
8df0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8e00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8e10: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
8e20: 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f  tadata_interop(_
8e30: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
8e40: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
8e50: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
8e60: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
8e70: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
8e80: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
8e90: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
8ea0: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
8eb0: 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f  nc, out dtLen, o
8ec0: 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73  ut csLen);..#els
8ed0: 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  e..      dtLen =
8ee0: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65   -1;..      csLe
8ef0: 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20  n = -1;....     
8f00: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8f10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8f20: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
8f30: 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55  tadata(_sql, ToU
8f40: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
8f50: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
8f60: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
8f70: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
8f80: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
8f90: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
8fa0: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
8fb0: 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65  t nautoInc);..#e
8fc0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
8fd0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
8fe0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
8ff0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9000: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
9010: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
9020: 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
9030: 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
9040: 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
9050: 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
9060: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
9070: 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
9080: 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
9090: 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
90a0: 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
90b0: 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
90c0: 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
90d0: 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
90e0: 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
90f0: 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
9100: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9110: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
9120: 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
9130: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9140: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9150: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
9160: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
9170: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9180: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9190: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
91a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
91b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
91c0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
91d0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
91e0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
91f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9200: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
9210: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
9220: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9230: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
9240: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9250: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
9260: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9270: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9280: 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
9290: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
92a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
92b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
92c0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
92d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
92e0: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
92f0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9300: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
9310: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9320: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
9330: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
9340: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
9350: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
9360: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23    long value;..#
9370: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9380: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9390: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
93a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
93b0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
93c0: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
93d0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
93e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
93f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9400: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9410: 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  n_int64_interop(
9420: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9430: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61  t, index, out va
9440: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
9450: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
9460: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
9470: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9480: 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78  de string GetTex
9490: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
94a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
94b0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
94c0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
94d0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
94e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
94f0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
9500: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9510: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
9520: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
9530: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9540: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
9550: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
9560: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
9570: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
9580: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9590: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
95a0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
95b0: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
95c0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
95d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
95e0: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
95f0: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
9600: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9610: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9620: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
9630: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9640: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
9650: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
9660: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
9670: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9680: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
9690: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
96a0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
96b0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
96c0: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
96d0: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
96e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
96f0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9700: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
9710: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
9720: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
9730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9740: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
9750: 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74  g GetBytes(SQLit
9760: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9770: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
9780: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
9790: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
97a0: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
97b0: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
97c0: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
97d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
97e0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
97f0: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
9800: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
9810: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
9820: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
9830: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
9840: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
9850: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
9860: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
9870: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
9880: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
9890: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
98a0: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
98b0: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
98c0: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
98d0: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
98e0: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
98f0: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
9900: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
9910: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
9920: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
9930: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
9940: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
9950: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
9960: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
9970: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9980: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d  _column_blob(stm
9990: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
99a0: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
99b0: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
99c0: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
99d0: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
99e0: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
99f0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
9a00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
9a10: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
9a20: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
9a30: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
9a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
9a50: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
9a60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9a70: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
9a80: 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
9a90: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9aa0: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
9ab0: 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
9ac0: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
9ad0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
9ae0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
9af0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
9b00: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
9b10: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
9b20: 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
9b30: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
9b40: 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
9b50: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
9b60: 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
9b70: 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
9b80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
9b90: 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
9ba0: 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
9bb0: 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
9bc0: 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
9bd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
9be0: 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
9bf0: 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
9c00: 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
9c10: 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
9c20: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
9c30: 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
9c40: 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
9c50: 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
9c60: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
9c70: 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
9c80: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
9c90: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
9ca0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9cb0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
9cc0: 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
9cd0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9ce0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
9cf0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
9d00: 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
9d10: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
9d20: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
9d30: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
9d40: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9d50: 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
9d60: 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
9d70: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
9d80: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9d90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9da0: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
9db0: 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
9dc0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9dd0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9de0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e  e void CreateFun
9df0: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ction(string str
9e00: 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41  Function, int nA
9e10: 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f  rgs, bool needCo
9e20: 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c  llSeq, SQLiteCal
9e30: 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69  lback func, SQLi
9e40: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73  teCallback funcs
9e50: 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c  tep, SQLiteFinal
9e60: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e  Callback funcfin
9e70: 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  al)..    {..    
9e80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9e90: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
9ea0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9eb0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9ec0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9ed0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9ee0: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
9ef0: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
9f00: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
9f10: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
9f20: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
9f30: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
9f40: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
9f50: 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20   1 : 0);..      
9f60: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
9f70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
9f80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9f90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
9fa0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
9fb0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
9fc0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
9fd0: 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
9fe0: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
9ff0: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
a000: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
a010: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
a020: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
a030: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a040: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a050: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
a060: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
a070: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
a080: 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
a090: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
a0a0: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20  , funcfinal);.. 
a0b0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
a0c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a0d0: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
a0e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a0f0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
a100: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
a110: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
a120: 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
a130: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
a140: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
a150: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
a160: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
a170: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
a180: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
a190: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
a1a0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
a1b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a1c0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
a1d0: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73  reateCollation(s
a1e0: 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69  tring strCollati
a1f0: 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  on, SQLiteCollat
a200: 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ion func, SQLite
a210: 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36  Collation func16
a220: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a230: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a240: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a250: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a260: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
a270: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
a280: 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20  rCollation), 2, 
a290: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
a2a0: 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  c16);..      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 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
a300: 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
a310: 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72  tion), 1, IntPtr
a320: 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20  .Zero, func);.. 
a330: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
a340: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a350: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
a360: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
a370: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
a380: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a390: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a3a0: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
a3b0: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
a3c0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
a3d0: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
a3e0: 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
a3f0: 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
a400: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a410: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
a420: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
a430: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
a440: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
a450: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
a460: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
a470: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
a480: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a490: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
a4a0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
a4b0: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
a4c0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
a4d0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
a4e0: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
a4f0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
a500: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
a510: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
a520: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
a530: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
a540: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
a550: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
a560: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
a570: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
a580: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
a590: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
a5a0: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
a5b0: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
a5c0: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
a5d0: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
a5e0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
a5f0: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
a600: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
a610: 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
a620: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
a630: 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
a640: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
a650: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a660: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
a670: 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
a680: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
a690: 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
a6a0: 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
a6b0: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
a6c0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
a6d0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
a6e0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
a6f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a700: 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
a710: 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
a720: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
a730: 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
a740: 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
a750: 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
a760: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
a770: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
a780: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
a790: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
a7a0: 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
a7b0: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
a7c0: 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
a7d0: 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
a7e0: 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
a7f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
a800: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
a810: 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
a820: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
a830: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
a840: 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
a850: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
a860: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
a870: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
a880: 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
a890: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
a8a0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
a8b0: 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
a8c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a8d0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
a8e0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
a8f0: 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
a900: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
a910: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
a920: 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
a930: 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
a940: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
a950: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a960: 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
a970: 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20  etBytes(c1);..  
a980: 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
a990: 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b  er.GetBytes(c2);
a9a0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
a9b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a9c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
a9d0: 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
a9e0: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
a9f0: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
aa00: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
aa10: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
aa20: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
aa30: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
aa40: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
aa50: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
aa60: 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
aa70: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
aa80: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
aa90: 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
aaa0: 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
aab0: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
aac0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
aad0: 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
aae0: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
aaf0: 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
ab00: 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
ab10: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
ab20: 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20      int type;.. 
ab30: 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20       int enc;.. 
ab40: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
ab50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ab60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
ab70: 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65  ext_collseq_inte
ab80: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74  rop(context, out
ab90: 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20   type, out enc, 
aba0: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  out len);....   
abb0: 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c     if (p != null
abc0: 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46  ) seq.Name = UTF
abd0: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
abe0: 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79  );..      seq.Ty
abf0: 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54  pe = (CollationT
ac00: 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20  ypeEnum)type;.. 
ac10: 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d       seq._func =
ac20: 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65   func;..      se
ac30: 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f  q.Encoding = (Co
ac40: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
ac50: 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20  num)enc;....    
ac60: 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23    return seq;..#
ac70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
ac80: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
ac90: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
aca0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
acb0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
acc0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
acd0: 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73  tParamValueBytes
ace0: 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e  (IntPtr p, int n
acf0: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
ad00: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
ad10: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
ad20: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
ad30: 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61   int nlen = Unsa
ad40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ad50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
ad60: 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  tes(p);....     
ad70: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
ad80: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
ad90: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
ada0: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
adb0: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
adc0: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
add0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
ade0: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
adf0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
ae00: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
ae10: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
ae20: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
ae30: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
ae40: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
ae50: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
ae60: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
ae70: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
ae80: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
ae90: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
aea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
aeb0: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
aec0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
aed0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
aee0: 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ob(p);....      
aef0: 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28    Marshal.Copy((
af00: 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e  IntPtr)(ptr.ToIn
af10: 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66  t64() + nDataOff
af20: 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74  set), bDest, nSt
af30: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
af40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
af50: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
af60: 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20        nCopied = 
af70: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
af80: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
af90: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
afa0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
afb0: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50  ride double GetP
afc0: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
afd0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
afe0: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
aff0: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
b000: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b010: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
b020: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
b030: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b040: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
b050: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
b060: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b070: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b080: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
b090: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
b0a0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
b0b0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
b0c0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
b0d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b0e0: 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56  de int GetParamV
b0f0: 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72  alueInt32(IntPtr
b100: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
b110: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
b120: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b130: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
b140: 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
b150: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b160: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
b170: 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49  aramValueInt64(I
b180: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
b190: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76  {..      Int64 v
b1a0: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
b1b0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
b1c0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
b1d0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
b1e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b1f0: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72  _value_int64(ptr
b200: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b210: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b220: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
b230: 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  ue_int64_interop
b240: 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29  (ptr, out value)
b250: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
b260: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
b270: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b280: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
b290: 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61  tring GetParamVa
b2a0: 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70  lueText(IntPtr p
b2b0: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  tr)..    {..#if 
b2c0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b2d0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
b2e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b2f0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
b300: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b310: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
b320: 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  xt_interop(ptr, 
b330: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
b340: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
b350: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
b360: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
b370: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
b380: 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 20 2d  lue_text(ptr), -
b390: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
b3a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b3b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
b3c0: 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61  Affinity GetPara
b3d0: 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74  mValueType(IntPt
b3e0: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
b3f0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b400: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b410: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
b420: 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  pe(ptr);..    }.
b430: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b440: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
b450: 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20  turnBlob(IntPtr 
b460: 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20  context, byte[] 
b470: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
b480: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
b490: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b4a0: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
b4b0: 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c  text, value, val
b4c0: 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  ue.Length, (IntP
b4d0: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
b4e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b4f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
b500: 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
b510: 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
b520: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
b530: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
b540: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
b550: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
b560: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b570: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
b580: 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  e(context, value
b590: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b5a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b5b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
b5c0: 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ult_double_inter
b5d0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
b5e0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
b5f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b600: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b610: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
b620: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
b630: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
b640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
b650: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b660: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b670: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
b680: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
b690: 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
b6a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b6b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
b6c0: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
b6d0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
b6e0: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
b6f0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b700: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b710: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
b720: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
b730: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b740: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b750: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
b760: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
b770: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
b780: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
b790: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
b7a0: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
b7b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b7c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
b7d0: 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
b7e0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
b7f0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b800: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
b810: 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72  sult_int64_inter
b820: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
b830: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
b840: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b850: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b860: 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
b870: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
b880: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
b890: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b8a0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
b8b0: 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
b8c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b8d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b8e0: 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
b8f0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
b900: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
b910: 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
b920: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
b930: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
b940: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b950: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b960: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
b970: 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
b980: 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
b990: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
b9a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b9b0: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72   override IntPtr
b9c0: 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78   AggregateContex
b9d0: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
b9e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b9f0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
ba00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ba10: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
ba20: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29  text(context, 1)
ba30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ba40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ba50: 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
ba60: 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
ba70: 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
ba80: 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
ba90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
baa0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bab0: 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
bac0: 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
bad0: 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
bae0: 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
baf0: 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
bb00: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
bb10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bb20: 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
bb30: 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
bb40: 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
bb50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
bb60: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
bb70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bb80: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
bb90: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
bba0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
bbb0: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
bbc0: 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
bbd0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
bbe0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
bbf0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
bc00: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
bc10: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
bc20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
bc30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
bc40: 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
bc50: 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
bc60: 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
bc70: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
bc80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
bc90: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bca0: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
bcb0: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
bcc0: 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
bcd0: 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
bce0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
bcf0: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
bd00: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
bd10: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bd20: 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
bd30: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
bd40: 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
bd50: 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
bd60: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
bd70: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
bd80: 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
bd90: 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
bda0: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
bdb0: 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
bdc0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
bdd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
bde0: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
bdf0: 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
be00: 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
be10: 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
be20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
be30: 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
be40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
be50: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
be60: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
be70: 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
be80: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
be90: 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
bea0: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
beb0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
bec0: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
bed0: 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
bee0: 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
bef0: 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
bf00: 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
bf10: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
bf20: 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
bf30: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
bf40: 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
bf50: 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
bf70: 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
bf80: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
bf90: 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
bfa0: 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
bfb0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
bfc0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
bfd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bfe0: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
bff0: 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
c000: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
c010: 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
c020: 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
c030: 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
c040: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
c050: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c060: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
c070: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
c080: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c090: 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
c0a0: 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
c0b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c0c0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
c0d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c0e0: 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
c0f0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
c100: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c110: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
c120: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c130: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
c140: 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
c150: 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
c160: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
c170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
c190: 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
c1a0: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
c1b0: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
c1c0: 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
c1d0: 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
c1e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c1f0: 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
c200: 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
c210: 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
c220: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c230: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
c240: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c250: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
c260: 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
c270: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
c280: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
c290: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
c2a0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c2b0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c2c0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c2d0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c2e0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
c2f0: 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
c300: 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
c310: 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
c320: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
c330: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
c340: 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
c350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
c360: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c370: 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
c380: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
c390: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
c3a0: 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
c3b0: 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
c3c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c3d0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
c3e0: 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
c3f0: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
c400: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
c410: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
c420: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
c430: 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
c440: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
c450: 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
c460: 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
c470: 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
c480: 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
c490: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c4a0: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
c4b0: 65 73 73 61 67 65 28 69 6e 74 20 69 45 72 72 43  essage(int iErrC
c4c0: 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
c4d0: 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
c4e0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c4f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c500: 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f  log(iErrCode, To
c510: 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b  UTF8(zMessage));
c520: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
c530: 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20  NTEROP_CODEC..  
c540: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
c550: 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73  ide void SetPass
c560: 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
c570: 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
c580: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
c590: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
c5a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c5b0: 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71  .sqlite3_key(_sq
c5c0: 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  l, passwordBytes
c5d0: 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e  , passwordBytes.
c5e0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
c5f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c600: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c610: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c620: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c630: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
c640: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c650: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c660: 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62  ChangePassword(b
c670: 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72  yte[] newPasswor
c680: 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
c690: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c6a0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c6b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c6c0: 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c  lite3_rekey(_sql
c6d0: 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  , newPasswordByt
c6e0: 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64  es, (newPassword
c6f0: 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f  Bytes == null) ?
c700: 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64   0 : newPassword
c710: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
c720: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c730: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c740: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c750: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c760: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c770: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
c780: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c790: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
c7a0: 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69  tUpdateHook(SQLi
c7b0: 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  teUpdateCallback
c7c0: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
c7d0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
c7e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c7f0: 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71  _update_hook(_sq
c800: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
c810: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
c820: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c830: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 43  erride void SetC
c840: 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
c850: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
c860: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
c870: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
c880: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c890: 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  ommit_hook(_sql,
c8a0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
c8b0: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
c8c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c8d0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72 61  ride void SetTra
c8e0: 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ceCallback(SQLit
c8f0: 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66  eTraceCallback f
c900: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
c910: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
c920: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
c930: 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  race(_sql, func,
c940: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
c950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c960: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c970: 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48  oid SetRollbackH
c980: 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61  ook(SQLiteRollba
c990: 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ckCallback func)
c9a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
c9b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c9c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62  ds.sqlite3_rollb
c9d0: 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ack_hook(_sql, f
c9e0: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
c9f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ca00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ca10: 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74      /// Allows t
ca20: 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20  he setting of a 
ca30: 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
ca40: 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69   invoked by SQLi
ca50: 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f  te when a..    /
ca60: 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63  // log event occ
ca70: 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63  urs.  Only one c
ca80: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73  allback may be s
ca90: 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20  et.  If NULL is 
caa0: 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  passed,..    ///
cab0: 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c   the logging cal
cac0: 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73  lback is unregis
cad0: 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tered...    /// 
cae0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
caf0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
cb00: 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62  "func">The callb
cb10: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
cb20: 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d  invoke.</param>.
cb30: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
cb40: 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
cb50: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
cb60: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
cb70: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
cb80: 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43  rrorCode SetLogC
cb90: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
cba0: 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
cbb0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cbc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
cbd0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
cbe0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cbf0: 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20  _config_log(..  
cc00: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
cc10: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
cc20: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
cc30: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
cc40: 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
cc50: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
cc60: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
cc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ccd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
cce0: 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
ccf0: 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
cd00: 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
cd10: 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
cd20: 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
cd30: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
cd40: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
cd50: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
cd60: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
cd70: 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
cd80: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
cd90: 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
cda0: 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
cdb0: 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
cdc0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
cdd0: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
cde0: 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
cdf0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ce00: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ce10: 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
ce20: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
ce30: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
ce40: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
ce50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
ce60: 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
ce70: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
ce80: 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
ce90: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
cea0: 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
ceb0: 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
cec0: 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
ced0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
cee0: 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
cef0: 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
cf00: 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
cf10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cf20: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
cf30: 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
cf40: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
cf50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cf60: 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
cf70: 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
cf80: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
cf90: 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
cfa0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
cfb0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
cfc0: 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cfe0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
cff0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
d000: 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
d010: 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
d020: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
d030: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d040: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
d050: 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
d060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
d070: 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
d080: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d090: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
d0a0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
d0b0: 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
d0c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
d0d0: 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
d0e0: 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
d0f0: 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
d100: 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
d110: 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
d120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
d130: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
d140: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
d150: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
d160: 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
d170: 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
d180: 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
d190: 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
d1a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
d1b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
d1c0: 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
d1d0: 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
d1e0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
d1f0: 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
d200: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d210: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
d220: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
d230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d240: 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
d250: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
d260: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
d270: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d280: 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
d290: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d2a0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
d2b0: 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
d2c0: 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
d2d0: 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
d2e0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
d2f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d300: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
d310: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
d330: 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
d340: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
d350: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
d360: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
d370: 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
d380: 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
d390: 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
d3a0: 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
d3b0: 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
d3c0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
d3d0: 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61  ackup = UnsafeNa
d3e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d3f0: 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28  te3_backup_init(
d400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
d410: 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
d420: 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
d430: 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
d440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d450: 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72  backup == IntPtr
d460: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
d470: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
d480: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 52 65  LiteException(Re
d490: 73 75 6c 74 43 6f 64 65 28 29 2c 20 47 65 74 4c  sultCode(), GetL
d4a0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
d4b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d4c0: 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28  ew SQLiteBackup(
d4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
d4e0: 69 73 2c 20 6e 65 77 20 53 51 4c 69 74 65 42 61  is, new SQLiteBa
d4f0: 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48  ckupHandle(destH
d500: 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 2c 0d  andle, backup),.
d510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73  .            des
d520: 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
d530: 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
d540: 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  , zSourceName);.
d550: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
d560: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d570: 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74   /// Copies up t
d580: 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74  o N pages from t
d590: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
d5a0: 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
d5b0: 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
d5c0: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
d5d0: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
d5e0: 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
d5f0: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
d600: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
d610: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
d620: 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
d630: 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e  p object to use.
d640: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
d650: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
d660: 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Page">..    /// 
d670: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  The number of pa
d680: 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67  ges to copy, neg
d690: 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c  ative to copy al
d6a0: 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65  l remaining page
d6b0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
d6c0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
d6d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79  aram name="retry
d6e0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20  ">..    /// Set 
d6f0: 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f  to true if the o
d700: 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74  peration needs t
d710: 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65  o be retried due
d720: 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20   to database..  
d730: 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73    /// locking is
d740: 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c  sues; otherwise,
d750: 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a   set to false...
d760: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
d770: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
d780: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  ns>..    /// Tru
d790: 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d  e if there are m
d7a0: 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20  ore pages to be 
d7b0: 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74  copied, false ot
d7c0: 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f  herwise...    //
d7d0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
d7e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d7f0: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63  ide bool StepBac
d800: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
d810: 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
d820: 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  p,..        int 
d830: 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  nPage,..        
d840: 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a  out bool retry..
d850: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
d860: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20  ..        retry 
d870: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
d880: 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
d890: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d8a0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
d8b0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
d8c0: 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
d8d0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
d8e0: 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
d8f0: 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
d900: 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
d910: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
d920: 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
d930: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
d940: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
d950: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
d980: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
d990: 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
d9a0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
d9b0: 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
d9c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
d9d0: 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
d9e0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
d9f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
da00: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
da10: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
da20: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
da30: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
da40: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
da50: 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
da60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
da70: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
da80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
da90: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74  qlite3_backup_st
daa0: 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50  ep(handlePtr, nP
dab0: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  age);..        b
dac0: 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
dad0: 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20  t = n; /* NOTE: 
dae0: 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20  Save for use by 
daf0: 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f  FinishBackup. */
db00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
db10: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
db20: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
db30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
db40: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
db50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
db60: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
db70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
db80: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  Busy)..        {
db90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
dba0: 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  try = true;..   
dbb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
dbc0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
dbd0: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
dbe0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
dbf0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d  rorCode.Locked).
dc00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dc10: 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
dc20: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
dc30: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
dc40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
dc50: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
dc60: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
dc70: 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20  e.Done)..       
dc80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dc90: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
dca0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
dcb0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
dcc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
dcd0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
dce0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
dcf0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
dd00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
dd10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
dd20: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
dd30: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
dd40: 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
dd50: 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20  ng to be copied 
dd60: 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d  from the source.
dd70: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
dd80: 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
dd90: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73  tion database as
dda0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
ddb0: 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
ddc0: 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65   /// backup obje
ddd0: 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
dde0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ddf0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
de00: 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
de10: 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b   object to check
de20: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
de30: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
de40: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
de50: 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20  remaining to be 
de60: 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73  copied.</returns
de70: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
de80: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d  override int Rem
de90: 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20  ainingBackup(.. 
dea0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
deb0: 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
dec0: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
ded0: 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
dee0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
def0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
df00: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
df10: 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
df20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
df30: 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
df40: 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
df50: 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
df60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
df70: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
df80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
df90: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
dfa0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
dfb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfc0: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
dfd0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
dfe0: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
dff0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
e000: 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
e010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e020: 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
e030: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
e040: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e050: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
e060: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
e080: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
e090: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
e0a0: 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
e0b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
e0c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e0d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
e0e0: 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e  up_remaining(han
e0f0: 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
e100: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e110: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
e120: 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20  turns the total 
e130: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
e140: 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
e150: 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
e160: 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20  d..    /// with 
e170: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
e180: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
e190: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e1a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e1b0: 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
e1c0: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
e1d0: 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
e1e0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
e1f0: 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e  urns>The total n
e200: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
e210: 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
e220: 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e  abase.</returns>
e230: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e240: 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65  verride int Page
e250: 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20  CountBackup(..  
e260: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
e270: 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
e280: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
e290: 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
e2a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e2b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e2c0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
e2d0: 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
e2e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
e2f0: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
e300: 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
e310: 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
e320: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
e330: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
e340: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e350: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
e360: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
e370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e380: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
e390: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
e3a0: 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
e3b0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
e3c0: 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
e3d0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
e3e0: 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
e3f0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
e400: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e410: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
e420: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
e430: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
e440: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
e450: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
e460: 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
e470: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
e480: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e490: 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
e4a0: 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64  p_pagecount(hand
e4b0: 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
e4c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
e4d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73  ry>..    /// Des
e4e0: 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70  troys the backup
e4f0: 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67   object, rolling
e500: 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70   back any backup
e510: 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d   that may be in.
e520: 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73  .    /// progess
e530: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
e540: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
e550: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
e560: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
e570: 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79  bject to destroy
e580: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
e590: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e5a0: 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b   void FinishBack
e5b0: 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
e5c0: 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
e5d0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
e5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
e5f0: 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
e600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e610: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
e620: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
e630: 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
e640: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
e650: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
e660: 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
e670: 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
e680: 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
e690: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e6a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
e6b0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
e6c0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
e6d0: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
e6e0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
e6f0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
e700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
e710: 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
e720: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
e730: 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
e740: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
e750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e760: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
e770: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
e780: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e790: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
e7a0: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
e7b0: 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
e7c0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
e7d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e7e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e7f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e800: 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
e810: 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 20 20  dlePtr);..      
e820: 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64    handle.SetHand
e830: 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a  leAsInvalid();..
e840: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
e850: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
e860: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d  ode.Ok) && (n !=
e870: 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
e880: 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
e890: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
e8a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e8b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e8c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e930: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
e940: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
e950: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
e960: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
e970: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
e980: 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
e990: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
e9a0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
e9b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e9c0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
e9d0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
e9e0: 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
e9f0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
ea00: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
ea10: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
ea20: 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
ea30: 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
ea40: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
ea50: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
ea60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ea70: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49  verride bool IsI
ea80: 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20  nitialized()..  
ea90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
eaa0: 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74  urn StaticIsInit
eab0: 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20  ialized();..    
eac0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
ead0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
eae0: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
eaf0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
eb00: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69  brary has been i
eb10: 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
eb20: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
eb30: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
eb40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
eb50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
eb60: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62  ns>..    /// A b
eb70: 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e  oolean indicatin
eb80: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
eb90: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
eba0: 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
ebb0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69  n..    /// initi
ebc0: 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  alized for the c
ebd0: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
ebe0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
ebf0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
ec00: 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74  l static bool St
ec10: 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
ec20: 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
ec30: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ec40: 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76 65  // BUGFIX: Preve
ec50: 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f 74  nt races with ot
ec60: 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72 20  her threads for 
ec70: 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63  this entire bloc
ec80: 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20  k, due..        
ec90: 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74 68  //         to th
eca0: 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65  e try/finally se
ecb0: 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69  mantics.  See ti
ecc0: 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37 37  cket [72905c9a77
ecd0: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ]...        //..
ece0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
ecf0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
ed00: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
ed10: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
ed20: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
ed30: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ed40: 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68  // NOTE: Save th
ed50: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c  e state of the l
ed60: 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64  ogging class and
ed70: 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74   then restore it
ed80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ed90: 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65 20         after we 
eda0: 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69  are done to avoi
edb0: 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61  d logging too ma
edc0: 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e  ny false errors.
edd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ede0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
edf0: 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20  ol savedEnabled 
ee00: 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62  = SQLiteLog.Enab
ee10: 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
ee20: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62    SQLiteLog.Enab
ee30: 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  led = false;....
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
ee50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ee60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
ee70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
ee90: 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
eea0: 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
eeb0: 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
eec0: 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
eee0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
eef0: 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
ef00: 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
ef10: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ef30: 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
ef40: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
ef50: 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
ef60: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
ef70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ef80: 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
ef90: 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
efa0: 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
efb0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
efd0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
efe0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
eff0: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
f000: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f010: 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
f020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f030: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
f040: 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
f050: 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
f060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f070: 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
f080: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
f090: 4d 69 73 75 73 65 29 3b 0d 0a 23 69 66 20 21 50  Misuse);..#if !P
f0a0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
f0b0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
f0c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f0d0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
f0e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
f100: 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
f110: 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
f120: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
f130: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
f140: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f150: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f160: 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e    /// Helper fun
f170: 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76  ction to retriev
f180: 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61  e a column of da
f190: 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76  ta from an activ
f1a0: 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  e statement...  
f1b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f1c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f1d0: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
f1e0: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
f1f0: 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75 67   step()'d throug
f200: 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  h</param>..    /
f210: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f220: 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
f230: 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
f240: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
f250: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f260: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
f270: 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
f280: 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
f290: 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
f2a0: 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
f2b0: 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
f2c0: 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
f2d0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
f2e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
f2f0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
f300: 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
f310: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
f320: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f330: 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
f340: 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
f350: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
f360: 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
f370: 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
f380: 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73 74     if (IsNull(st
f390: 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74 75  mt, index)) retu
f3a0: 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
f3b0: 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
f3c0: 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41  nity aff = typ.A
f3d0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
f3e0: 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  Type t = null;..
f3f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e  ..      if (typ.
f400: 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f  Type != DbType.O
f410: 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d  bject)..      {.
f420: 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c  .        t = SQL
f430: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
f440: 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29  eTypeToType(typ)
f450: 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d  ;..        aff =
f460: 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28   TypeToAffinity(
f470: 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  t);..      }....
f480: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66        switch (af
f490: 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  f)..      {..   
f4a0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
f4b0: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
f4c0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
f4d0: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
f4e0: 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e  uid && typ.Affin
f4f0: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
f500: 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20  ity.Text)..     
f510: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
f520: 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73  w Guid(GetText(s
f530: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d  tmt, index));...
f540: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
f550: 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73   = (int)GetBytes
f560: 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
f570: 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20   null, 0, 0);.. 
f580: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
f590: 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b  b = new byte[n];
f5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42  ..          GetB
f5b0: 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
f5c0: 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a  , 0, b, 0, n);..
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
f5e0: 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
f5f0: 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20  pe.Guid && n == 
f600: 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  16)..           
f610: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
f620: 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (b);....        
f630: 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20    return b;..   
f640: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
f650: 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a  finity.DateTime:
f660: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
f670: 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73  rn GetDateTime(s
f680: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
f690: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
f6a0: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
f6b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
f6c0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
f6d0: 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c   GetDouble(stmt,
f6e0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
f6f0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
f700: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
f710: 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
f720: 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
f730: 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29  index), t, null)
f740: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
f750: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
f760: 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  64:..          i
f770: 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
f780: 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
f790: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
f7a0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
f7b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f7c0: 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
f7d0: 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  pe(GetInt64(stmt
f7e0: 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
f7f0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66  l);..        def
f800: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
f810: 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
f820: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
f830: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
f840: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f850: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75  erride int GetCu
f860: 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c  rsorForTable(SQL
f870: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f880: 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72  t, int db, int r
f890: 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d  ootPage)..    {.
f8a0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
f8b0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74  NDARD..      ret
f8c0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
f8d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f8e0: 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74  table_cursor_int
f8f0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
f900: 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74  e_stmt, db, root
f910: 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  Page);..#else.. 
f920: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
f930: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
f940: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f950: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
f960: 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53  RowIdForCursor(S
f970: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f980: 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29  tmt, int cursor)
f990: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
f9a0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
f9b0: 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b       long rowid;
f9c0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
f9d0: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
f9e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f9f0: 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f  .sqlite3_cursor_
fa00: 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74  rowid_interop(st
fa10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
fa20: 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77   cursor, out row
fa30: 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  id);..      if (
fa40: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
fa50: 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e  rCode.Ok) return
fa60: 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20   rowid;....     
fa70: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73   return 0;..#els
fa80: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
fa90: 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  0;..#endif..    
faa0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fab0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
fac0: 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78  GetIndexColumnEx
fad0: 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e  tendedInfo(strin
fae0: 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69  g database, stri
faf0: 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  ng index, string
fb00: 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74   column, out int
fb10: 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69   sortMode, out i
fb20: 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20  nt onError, out 
fb30: 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e  string collation
fb40: 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b  Sequence)..    {
fb50: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
fb60: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e  ANDARD..      In
fb70: 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20  tPtr coll;..    
fb80: 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a    int colllen;..
fb90: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
fba0: 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20  rCode rc;....   
fbb0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = 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 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e  te3_index_column
fbe0: 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73  _info_interop(_s
fbf0: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62  ql, ToUTF8(datab
fc00: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64  ase), ToUTF8(ind
fc10: 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  ex), ToUTF8(colu
fc20: 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64  mn), out sortMod
fc30: 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20  e, out onError, 
fc40: 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f  out coll, out co
fc50: 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69  lllen);..      i
fc60: 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
fc70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
fc80: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
fc90: 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29  eption(rc, null)
fca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  ;....      colla
fcb0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55  tionSequence = U
fcc0: 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
fcd0: 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c  , colllen);..#el
fce0: 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f  se..      sortMo
fcf0: 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f  de = 0;..      o
fd00: 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20  nError = 2;..   
fd10: 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
fd20: 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b  ence = "BINARY";
fd30: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
fd40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
fd50: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
fd60: 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e  rrorCode FileCon
fd70: 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e  trol(string zDbN
fd80: 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74  ame, int op, Int
fd90: 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b  Ptr pArg)..    {
fda0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
fdb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fdc0: 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  ds.sqlite3_file_
fdd0: 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a  control(_sql, (z
fde0: 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  DbName != null) 
fdf0: 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65  ? ToUTF8(zDbName
fe00: 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41  ) : null, op, pA
fe10: 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  rg);..    }..  }
fe20: 0d 0a 7d 0d 0a                                   ..}..