System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 43b258c0f4173c1e8dea2e9c667a7fb66dd770e3:


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 35 2e 30  sion = "1.0.85.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 6f 76  .    internal ov
1670: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
1680: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
1690: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
16a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
16b0: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
16c0: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
16d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
16e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
16f0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
1700: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
1710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
1720: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
1730: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
1740: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
1750: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
1760: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
1770: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
1780: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
1790: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
17a0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
17b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
17c0: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
17d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
17f0: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
1800: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1830: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1840: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
1890: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
18c0: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18e0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
18f0: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
1900: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1910: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1920: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
1930: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
1940: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1960: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
1970: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
1980: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1990: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
19a0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
19b0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
19c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19d0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
19e0: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
19f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1a00: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
1a10: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
1a20: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
1a30: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1a40: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1a50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1a60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
1a70: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
1a80: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1a90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1aa0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
1ab0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
1ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1ad0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1ae0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
1af0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
1b00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b10: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
1b20: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
1b30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1b40: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
1b50: 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20  l AutoCommit..  
1b60: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
1b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b80: 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f   return IsAutoco
1b90: 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  mmit(_sql, _sql)
1ba0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1bb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1bc0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
1bd0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
1be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1bf0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
1c00: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
1c10: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
1c20: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
1c30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1c40: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
1c50: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
1c60: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1c70: 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d  long rowId = 0;.
1c80: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
1c90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1ca0: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
1cb0: 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f  _rowid_interop(_
1cc0: 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b  sql, ref rowId);
1cd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1ce0: 20 72 6f 77 49 64 3b 0d 0a 23 65 6e 64 69 66 0d   rowId;..#endif.
1cf0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1d00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1d10: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
1d20: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
1d30: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
1d40: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1d50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
1d60: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1d70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1d80: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
1d90: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
1da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1db0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1dc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
1dd0: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
1de0: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
1df0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1e00: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
1e10: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
1e20: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1e30: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
1e40: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
1e50: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
1e60: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1e70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1e80: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
1e90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1ea0: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
1eb0: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
1ec0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ed0: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
1ee0: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
1ef0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
1f00: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
1f10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
1f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1f30: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
1f40: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
1f50: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
1f60: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
1f70: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
1f80: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
1f90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
1fa0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1fb0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
1fc0: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
1fd0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1fe0: 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d  long bytes = 0;.
1ff0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
2000: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2010: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
2020: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c  water_interop(0,
2030: 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20   ref bytes);..  
2040: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
2050: 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  es;..#endif..   
2060: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2070: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
2080: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
2090: 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74  Code SetMemorySt
20a0: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
20b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
20c0: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 65   return StaticSe
20d0: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61  tMemoryStatus(va
20e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
20f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2100: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
2110: 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d  ode StaticSetMem
2120: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
2130: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
2140: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
2150: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
2160: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2170: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e  qlite3_config_in
2180: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2190: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
21a0: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
21b0: 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c  G_MEMSTATUS, val
21c0: 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a  ue ? 1 : 0);....
21d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
21e0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
21f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2200: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
2210: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
2220: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
2230: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
2240: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
2250: 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20  nfig options... 
2260: 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64     /// We depend
2270: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
2280: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
2290: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
22a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
22b0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
22c0: 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
22d0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
22e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
22f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2300: 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
2310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
2320: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
2330: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2340: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75  hods.sqlite3_shu
2350: 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 20 20  tdown();..      
2360: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
2370: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2380: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
2390: 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20  l IsOpen()..    
23a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
23b0: 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  n (_sql != null)
23c0: 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61   && !_sql.IsInva
23d0: 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43  lid && !_sql.IsC
23e0: 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  losed;..    }...
23f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2400: 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e  erride void Open
2410: 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e  (string strFilen
2420: 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ame, SQLiteConne
2430: 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65  ctionFlags conne
2440: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69  ctionFlags, SQLi
2450: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20  teOpenFlagsEnum 
2460: 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d  openFlags, int m
2470: 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c  axPoolSize, bool
2480: 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b   usePool)..    {
2490: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
24a0: 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   != null) return
24b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50  ;....      _useP
24c0: 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a  ool = usePool;..
24d0: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
24e0: 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a  = strFilename;..
24f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50  ..      if (useP
2500: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
2510: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51         _sql = SQ
2520: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
2530: 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c  ol.Remove(strFil
2540: 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69  ename, maxPoolSi
2550: 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72  ze, out _poolVer
2560: 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e  sion);....#if !N
2570: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2580: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2590: 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
25a0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
25b0: 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28  g.Format("Open (
25c0: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73  Pool): {0}", (_s
25d0: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73  ql != null) ? _s
25e0: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  ql.ToString() : 
25f0: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e  "<null>"));..#en
2600: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
2610: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
2620: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2630: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
2640: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2650: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2660: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
2670: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
2680: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
2690: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
26a0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
26b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
26c0: 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20 20  tPtr db;..      
26d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
26e0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
26f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
2700: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2710: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
2720: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2730: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
2740: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
2750: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2760: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
2770: 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  nFunctions)..   
2780: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2790: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
27a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
27b0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
27c0: 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  op(ToUTF8(strFil
27d0: 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67  ename), openFlag
27e0: 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20 20  s, out db);..   
27f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2800: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
2810: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2820: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
2830: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2840: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
2850: 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  v2(ToUTF8(strFil
2860: 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20  ename), out db, 
2870: 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50 74  openFlags, IntPt
2880: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20  r.Zero);..      
2890: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45      }....#if !NE
28a0: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
28b0: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
28c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63  ..          Trac
28d0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
28e0: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a  ng.Format("Open:
28f0: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
2900: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
2910: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
2920: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
2930: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
2940: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
2950: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
2960: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
2970: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
2980: 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  db);..        }.
2990: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  .        lock (_
29a0: 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20  sql) { /* HACK: 
29b0: 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c  Force the SyncBl
29c0: 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74  ock to be "creat
29d0: 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20  ed" now. */ }.. 
29e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f       }..      //
29f0: 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20   Bind functions 
2a00: 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  to this connecti
2a10: 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76  on.  If any prev
2a20: 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  ious functions o
2a30: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d  f the same name.
2a40: 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61  .      // were a
2a50: 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68  lready bound, th
2a60: 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69  en the new bindi
2a70: 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20  ngs replace the 
2a80: 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e  old...      _fun
2a90: 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51  ctionsArray = SQ
2aa0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e  LiteFunction.Bin
2ab0: 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c  dFunctions(this,
2ac0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
2ad0: 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d  );..      SetTim
2ae0: 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20  eout(0);..      
2af0: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71  GC.KeepAlive(_sq
2b00: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
2b10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2b20: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
2b30: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
2b40: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2b50: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
2b60: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
2b70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2b80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
2b90: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20  t CountPool().. 
2ba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
2bb0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
2bc0: 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e   int> counts = n
2bd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  ull;..        in
2be0: 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b  t openCount = 0;
2bf0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c  ..        int cl
2c00: 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  oseCount = 0;.. 
2c10: 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c         int total
2c20: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Count = 0;....  
2c30: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
2c40: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f  ectionPool.GetCo
2c50: 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d  unts(_fileName,.
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c70: 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65   counts, ref ope
2c80: 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73  nCount, ref clos
2c90: 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  eCount,..       
2ca0: 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f       ref totalCo
2cb0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
2cc0: 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75   return totalCou
2cd0: 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  nt;..    }....  
2ce0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2cf0: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
2d00: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
2d10: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
2d20: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2d30: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
2d40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2d50: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f  3_busy_timeout(_
2d60: 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29  sql, nTimeoutMS)
2d70: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
2d80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
2d90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
2da0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
2db0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
2dc0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2dd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2de0: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  ide bool Step(SQ
2df0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2e00: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
2e10: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2e20: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  e n;..      Rand
2e30: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
2e40: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
2e50: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
2e60: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2e70: 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  nt;..      uint 
2e80: 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29  timeout = (uint)
2e90: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
2ea0: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
2eb0: 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   1000);....     
2ec0: 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
2ed0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ee0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2ef0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2f00: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
2f10: 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  e_stmt);....    
2f20: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
2f30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
2f40: 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ) return true;..
2f50: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
2f60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2f70: 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61  .Done) return fa
2f80: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2f90: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
2fa0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
2fb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
2fd0: 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de r;....       
2fe0: 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f     // An error o
2ff0: 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74  ccurred, attempt
3000: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
3010: 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  atement.  If the
3020: 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65   reset worked be
3030: 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  cause the..     
3040: 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68       // schema h
3050: 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74  as changed, re-t
3060: 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69  ry the step agai
3070: 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65  n.  If it errore
3080: 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68  d our because th
3090: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
30a0: 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b        // is lock
30b0: 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65  ed, then keep re
30c0: 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65  trying until the
30d0: 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74   command timeout
30e0: 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
30f0: 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74      r = Reset(st
3100: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
3110: 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74    if (r == SQLit
3120: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
3130: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
3140: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
3150: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
3160: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
3170: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
3180: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
3190: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
31a0: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
31b0: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74  Code.Busy) && st
31c0: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  mt._command != n
31d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
31f0: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
3200: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
3210: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
3220: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
3230: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
3240: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
3250: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
3260: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
3270: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
3280: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
3290: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
32a0: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
32b0: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
32d0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
32e0: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
32f0: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
3300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3320: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3330: 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74  Exception(r, Get
3340: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
3350: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3360: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
3370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3390: 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20  Otherwise sleep 
33a0: 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f  for a random amo
33b0: 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74  unt of time up t
33c0: 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20  o 150ms..       
33d0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68         System.Th
33e0: 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53  reading.Thread.S
33f0: 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c  leep(rnd.Next(1,
3400: 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   150));..       
3410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3420: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
3430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3440: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3450: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
3460: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
3470: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3480: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3490: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
34a0: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
34b0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
34c0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
34d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
34e0: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
34f0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
3500: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
3510: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
3520: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3530: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
3540: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
3550: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
3560: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
3570: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
3580: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
3590: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
35a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
35b0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
35c0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
35d0: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
35e0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
35f0: 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20  string str;..   
3600: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3610: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
3620: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
3630: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
3640: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
3650: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
3660: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
3670: 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72 29   1000), out str)
3680: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3690: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
36a0: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
36b0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
36c0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
36d0: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
36e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
36f0: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
3700: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
3710: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
3720: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
3730: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
3740: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ne..          st
3750: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mt._sqlite_stmt 
3760: 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74  = tmp._sqlite_st
3770: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  mt;..          t
3780: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mp._sqlite_stmt 
3790: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
37a0: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
37b0: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
37c0: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
37d0: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
37e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37f0: 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74 65 45   return (SQLiteE
3800: 72 72 6f 72 43 6f 64 65 29 28 2d 31 29 3b 20 2f  rrorCode)(-1); /
3810: 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20  / Reset was OK, 
3820: 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e  with schema chan
3830: 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ge..      }..   
3840: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
3850: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3860: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
3870: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3880: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72  Busy)..        r
3890: 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20  eturn n;....    
38a0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
38b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
38c0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
38d0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
38e0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
38f0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  r());....      r
3900: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
3910: 72 43 6f 64 65 2e 4f 6b 3b 20 2f 2f 20 57 65 20  rCode.Ok; // We 
3920: 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68  reset OK, no sch
3930: 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20  ema changes..   
3940: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3950: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
3960: 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ng GetLastError(
3970: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3980: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61 73  return SQLiteBas
3990: 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f  e.GetLastError(_
39a0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
39b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
39c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
39d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
39e0: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
39f0: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
3a00: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
3a10: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
3a20: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
3a30: 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74  S, out string st
3a40: 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d  rRemain)..    {.
3a50: 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69  .      if (!Stri
3a60: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
3a70: 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20  (strSql))..     
3a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
3a90: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3aa0: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
3ab0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e   support the con
3ac0: 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74 65  cept of separate
3ad0: 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20   schemas..      
3ae0: 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e    //       in on
3af0: 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65 72  e database; ther
3b00: 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68  efore, remove th
3b10: 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61  e base schema na
3b20: 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  me..        //  
3b30: 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f       used to smo
3b40: 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20  oth integration 
3b50: 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e  with the base .N
3b60: 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20  ET Framework..  
3b70: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
3b80: 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20  ata classes...  
3b90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ba0: 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63 68    string baseSch
3bb0: 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21  emaName = (cnn !
3bc0: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62  = null) ? cnn._b
3bd0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20  aseSchemaName : 
3be0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
3bf0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
3c00: 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53  ullOrEmpty(baseS
3c10: 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20  chemaName))..   
3c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c30: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
3c40: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
3c50: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
3c60: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
3c70: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
3c80: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
3c90: 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62       "[{0}].", b
3ca0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
3cb0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
3cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
3cd0: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
3ce0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
3cf0: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
3d00: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
3d10: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
3d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
3d30: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
3d40: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
3d50: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
3d60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
3d70: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3d80: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
3d90: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
3da0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
3db0: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
3dc0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
3dd0: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  efault;....     
3de0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
3df0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3e00: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20  ags.LogPrepare) 
3e10: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
3e20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
3e30: 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  are)..      {.. 
3e40: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73 74           if ((st
3e50: 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  rSql == null) ||
3e60: 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20   (strSql.Length 
3e70: 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71 6c  == 0) || (strSql
3e80: 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d  .Trim().Length =
3e90: 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20  = 0))..         
3ea0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
3eb0: 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70 61  ogMessage("Prepa
3ec0: 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d  ring {<nothing>}
3ed0: 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ...");..        
3ee0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
3ef0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
3f00: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
3f10: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
3f30: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
3f40: 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72  Culture, "Prepar
3f50: 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c  ing {{{0}}}...",
3f60: 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20   strSql));..    
3f70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74    }....      Int
3f80: 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74  Ptr stmt = IntPt
3f90: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49  r.Zero;..      I
3fa0: 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50  ntPtr ptr = IntP
3fb0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
3fc0: 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
3fd0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3fe0: 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72  ode n = SQLiteEr
3ff0: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d  rorCode.Schema;.
4000: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74 72 69  .      int retri
4010: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 62  es = 0;..      b
4020: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
4030: 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20  (strSql);..     
4040: 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73   string typedefs
4050: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
4060: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
4070: 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  cmd = null;..   
4080: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
4090: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
40a0: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
40b0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
40c0: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  TickCount;....  
40d0: 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e      GCHandle han
40e0: 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41  dle = GCHandle.A
40f0: 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65  lloc(b, GCHandle
4100: 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20  Type.Pinned);.. 
4110: 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c       IntPtr psql
4120: 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66   = handle.AddrOf
4130: 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d  PinnedObject();.
4140: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61  .      SQLiteSta
4150: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61  tementHandle sta
4160: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e  tementHandle = n
4170: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d  ull;..      try.
4180: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4190: 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53    while ((n == S
41a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
41b0: 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51  chema || n == SQ
41c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
41d0: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
41e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
41f0: 79 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20  y) && retries < 
4200: 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  3)..        {.. 
4210: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
4220: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4230: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4240: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
4250: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   }..          fi
4260: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
4270: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
4280: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
4290: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
42a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
42b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
42c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
42d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
42e0: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71  pare_interop(_sq
42f0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
4300: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
4310: 20 6f 75 74 20 70 74 72 2c 20 6f 75 74 20 6c 65   out ptr, out le
4320: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4330: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
4340: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4350: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
4360: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
4370: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
4380: 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a 20  mt, out ptr);.. 
4390: 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d             len =
43a0: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   -1;..#endif....
43b0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
43c0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54 41  _20 && TRACE_STA
43d0: 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20  TEMENT..        
43e0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
43f0: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
4400: 74 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29  t("Prepare ({0})
4410: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
4420: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
4430: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
4440: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4450: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
4460: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
4470: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4480: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
4490: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
44a0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71  tementHandle(_sq
44b0: 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  l, stmt);..     
44c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
44d0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
44e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
44f0: 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ema)..          
4500: 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20    retries++;..  
4510: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
4520: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
4530: 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20  rCode.Error)..  
4540: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4550: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
4560: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
4570: 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20  tError(), "near 
4580: 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61  \"TYPES\": synta
4590: 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67  x error", String
45a0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
45b0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
45c0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
45d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
45e0: 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53    int pos = strS
45f0: 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b  ql.IndexOf(';');
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4610: 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70  if (pos == -1) p
4620: 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67  os = strSql.Leng
4630: 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20  th - 1;....     
4640: 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66           typedef
4650: 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  s = strSql.Subst
4660: 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29  ring(0, pos + 1)
4670: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4680: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
4690: 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b  .Substring(pos +
46a0: 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   1);....        
46b0: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
46c0: 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  = "";....       
46d0: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
46e0: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
46f0: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
4700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
4710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4720: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
4730: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
4740: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
4750: 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29  , out strRemain)
4760: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4770: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
4780: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
4790: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
47a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64           if (cmd
47b0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
47c0: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53             cmd.S
47d0: 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73  etTypes(typedefs
47e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
47f0: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
4800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4810: 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e  #if (NET_35 || N
4820: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29  ET_40 || NET_45)
4830: 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f   && !PLATFORM_CO
4840: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
4850: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
4860: 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53 63   if (_buildingSc
4870: 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26 26  hema == false &&
4880: 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
4890: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
48a0: 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c  0, "no such tabl
48b0: 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c  e: TEMP.SCHEMA",
48c0: 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f   0, 26, StringCo
48d0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
48e0: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
48f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4910: 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d  strRemain = "";.
4920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
4930: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
4940: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
4950: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
4960: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4970: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
4980: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
4990: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
49a0: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
49b0: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
49c0: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
49d0: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
49e0: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
49f0: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
4a00: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
4a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a40: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
4a50: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
4a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a70: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
4a80: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
4a90: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
4aa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
4ad0: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
4ae0: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
4af0: 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  out strRemain);.
4b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b10: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
4b20: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
4b30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4b50: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
4b60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4b70: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
4b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4ba0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
4bb0: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
4bc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4bd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
4be0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
4c00: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
4c10: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
4c20: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
4c30: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f  rrorCode.Busy) /
4c40: 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61  / Locked -- dela
4c50: 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  y a small amount
4c60: 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67   before retrying
4c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
4c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
4c90: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
4ca0: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
4cb0: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
4cc0: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
4cd0: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
4ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4cf0: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
4d00: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
4d10: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
4d20: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
4d30: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
4d40: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
4d50: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
4d60: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
4d70: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
4d80: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
4d90: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d  ck > timeoutMS).
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
4dc0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4dd0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
4de0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
4df0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4e00: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
4e10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4e20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
4e30: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
4e40: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
4e50: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
4e60: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
4e70: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
4e80: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
4e90: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
4ea0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
4eb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4ed0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
4ee0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4ef0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
4f00: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
4f10: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
4f20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
4f30: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
4f40: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
4f50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
4f60: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
4f70: 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20   != null) cmd = 
4f80: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
4f90: 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c  ent(this, flags,
4fa0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
4fb0: 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  , strSql.Substri
4fc0: 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e  ng(0, strSql.Len
4fd0: 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e  gth - strRemain.
4fe0: 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75  Length), previou
4ff0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  s);....        r
5000: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
5010: 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c    }..      final
5020: 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ly..      {..   
5030: 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65       handle.Free
5040: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
5050: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
5060: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
5070: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5080: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5090: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
50a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
50b0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
50c0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
50d0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
50e0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
50f0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
5100: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
5110: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
5120: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
5130: 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20   as NULL...",.. 
5140: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
5150: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29  eIntPtr, index))
5160: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5170: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5180: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5190: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
51a0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
51b0: 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65  index, ValueType
51c0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
51d0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
51e0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
51f0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
5200: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
5210: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
5220: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
5230: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
5240: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
5250: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
5260: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
5270: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
5280: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
5290: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c  tPtr, index, val
52a0: 75 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61  ue.GetType(), va
52b0: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
52c0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
52d0: 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61  tic string Forma
52e0: 74 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69  tDateTime(DateTi
52f0: 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  me value)..    {
5300: 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
5310: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
5320: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
5330: 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  er();....       
5340: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
5350: 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79  alue.ToString("y
5360: 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a  yyy-MM-ddTHH:mm:
5370: 73 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d  ss.FFFFFFFK"));.
5380: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
5390: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
53a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
53b0: 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b  end(value.Kind);
53c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
53d0: 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20  .Append(' ');.. 
53e0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
53f0: 70 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73  pend(value.Ticks
5400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
5410: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
5420: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ring();..    }..
5430: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
5440: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
5450: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
5460: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5470: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
5480: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
5490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
54a0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
54b0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
54c0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
54d0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
54e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
54f0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5500: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5510: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5520: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
5530: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
5540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
5550: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
5560: 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d  , typeof(DateTim
5570: 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69  e), FormatDateTi
5580: 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20  me(value)));..  
5590: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
55a0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
55b0: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
55c0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
55d0: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
55e0: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
55f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5600: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5610: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5620: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
5630: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5640: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5650: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
5660: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
5670: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
5680: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
5690: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
56a0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
56b0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
56c0: 64 65 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69  dex, typeof(Stri
56d0: 6e 67 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  ng), (value != n
56e0: 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22  ull) ? value : "
56f0: 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20  <null>"));..    
5700: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
5710: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54   static string T
5720: 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69  oHexadecimalStri
5730: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74  ng(..        byt
5740: 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20  e[] array..     
5750: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
5760: 20 20 20 20 20 69 66 20 28 61 72 72 61 79 20 3d       if (array =
5770: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5780: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
5790: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72  ;....        Str
57a0: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
57b0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
57c0: 69 6c 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67  ilder(array.Leng
57d0: 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20  th * 2);....    
57e0: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
57f0: 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a   array.Length;..
5800: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ..        for (i
5810: 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
5820: 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e  dex < length; in
5830: 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
5840: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
5850: 64 28 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54  d(array[index].T
5860: 6f 53 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d  oString("x2"));.
5870: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
5880: 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e  n result.ToStrin
5890: 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g();..    }.... 
58a0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
58b0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
58c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
58d0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
58e0: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
58f0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5900: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
5910: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
5920: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
5930: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
5940: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
5950: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
5960: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
5970: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
5980: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
5990: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
59a0: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
59b0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
59c0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
59d0: 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61  eof(Byte[]), (va
59e0: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  lue != null) ? T
59f0: 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69  oHexadecimalStri
5a00: 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75  ng(value) : "<nu
5a10: 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ll>"));..    }..
5a20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5a30: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
5a40: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
5a50: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
5a60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5a70: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
5a80: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
5a90: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5aa0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
5ab0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
5ac0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
5ad0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
5ae0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5af0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5b00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
5b10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5b20: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
5b30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5b40: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
5b50: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
5b60: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
5b70: 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  }....#if !PLATFO
5b80: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5b90: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ORK..        SQL
5ba0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
5bb0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5bc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
5bd0: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
5be0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5bf0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5c00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5c10: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5c20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5c30: 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  bind_double_inte
5c40: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
5c50: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
5c60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5c70: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
5c80: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
5c90: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5ca0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
5cb0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
5cc0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5cd0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
5ce0: 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74  Bind_Int32(SQLit
5cf0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5d00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5d10: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
5d20: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c  t index, int val
5d30: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5d40: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
5d50: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5d60: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
5d70: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
5d80: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
5d90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5da0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
5db0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5dc0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
5dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5de0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
5df0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5e00: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
5e10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
5e20: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
5e30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5e40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
5e50: 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  _int(handle, ind
5e60: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
5e70: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
5e80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5e90: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
5ea0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
5eb0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
5ec0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5ed0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5ee0: 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32  void Bind_UInt32
5ef0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5f00: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
5f10: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
5f20: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75  gs, int index, u
5f30: 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
5f40: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5f50: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
5f60: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
5f70: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
5f80: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
5f90: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
5fa0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
5fb0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5fc0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
5fd0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
5fe0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5ff0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
6000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
6010: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
6020: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
6030: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
6040: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
6050: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
6060: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
6070: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
6080: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
6090: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d  UInt32AsInt64) =
60a0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
60b0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74  onFlags.BindUInt
60c0: 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20  32AsInt64)..    
60d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
60e0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d     long value2 =
60f0: 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21   value;....#if !
6100: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6110: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6120: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
6130: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6140: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
6150: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
6160: 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65   value2);..#else
6170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
6180: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6190: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
61a0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
61b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
61c0: 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ref value2);..#e
61d0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
61e0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
61f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6200: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
6210: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6220: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28  lite3_bind_uint(
6230: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
6240: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
6250: 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  }..        if (n
6260: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
6270: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
6280: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
6290: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
62a0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
62b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
62c0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
62d0: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
62e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
62f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6300: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6310: 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  ex, long value).
6320: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6330: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
6340: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
6350: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6360: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6370: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6380: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
6390: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
63a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
63b0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
63c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
63d0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
63e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
63f0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6400: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
6410: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
6420: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6430: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
6440: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6450: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
6460: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
6470: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
6480: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6490: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
64a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
64b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
64c0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
64d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
64e0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
64f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
6500: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6510: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
6520: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6530: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
6540: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
6550: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6560: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
6570: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
6580: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6590: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
65a0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
65b0: 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  x, ulong value).
65c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
65d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
65e0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
65f0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6600: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6610: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6620: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
6630: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6640: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6650: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6660: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6670: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6680: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6690: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
66a0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
66b0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
66c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
66d0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
66e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
66f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
6700: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
6710: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
6720: 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  e..        SQLit
6730: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6740: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6750: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6760: 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  uint64_interop(h
6770: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
6780: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
6790: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
67a0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
67b0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
67c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
67d0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
67e0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
67f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6800: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
6810: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
6820: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6830: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6840: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6850: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
6860: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6870: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
6880: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
6890: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
68a0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
68b0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
68c0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
68d0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
68e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
68f0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
6900: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6910: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
6920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6930: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
6940: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
6950: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
6960: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
6970: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
6980: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69  F8(value);....#i
6990: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
69a0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
69b0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
69c0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
69d0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
69e0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
69f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6a00: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
6a20: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
6a30: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
6a40: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
6a50: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6a60: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6a70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6a80: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
6a90: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
6aa0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
6ab0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
6ac0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
6ad0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6ae0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
6af0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6b00: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
6b10: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6b20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6b30: 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65  e void Bind_Date
6b40: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
6b50: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6b60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6b70: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6b80: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d  x, DateTime dt).
6b90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6ba0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
6bb0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
6bc0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6bd0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6be0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6bf0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
6c00: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6c10: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6c20: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6c30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6c40: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6c50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6c60: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6c70: 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a  e, index, dt);..
6c80: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
6c90: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69  f....        swi
6ca0: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
6cb0: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
6cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
6cd0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
6ce0: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
6d20: 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69   dt.Ticks;....#i
6d30: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6d40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d60: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
6d70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6d80: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
6d90: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6da0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
6db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6de0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
6df0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
6e30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6e40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6e50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6e60: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
6e70: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6e80: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
6e90: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6ea0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6eb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6ec0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6ed0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
6ee0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
6ef0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
6f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6f10: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
6f20: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6f30: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
6f40: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
6f50: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
6f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6f70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
6fa0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
6fb0: 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a  ats.JulianDay:..
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6fe0: 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61         double va
6ff0: 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61  lue = ToJulianDa
7000: 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  y(dt);....#if !P
7010: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7020: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7040: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7050: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7060: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7070: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7080: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
70c0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
70d0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7100: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
7110: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7120: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7130: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
7140: 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uble(handle, ind
7150: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
7160: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
7170: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7180: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7190: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
71a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
71b0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ble_interop(hand
71c0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
71d0: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71f0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
7200: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
7210: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7220: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
7230: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7250: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
7260: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7270: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
7280: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
7290: 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20  s.UnixEpoch:..  
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
72b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
72c0: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
72d0: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36  = Convert.ToInt6
72e0: 34 28 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e  4(dt.Subtract(Un
72f0: 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65  ixEpoch).TotalSe
7300: 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21  conds);....#if !
7310: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7320: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7340: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
7350: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7360: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
7370: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7380: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
73c0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
73d0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7400: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7410: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
7420: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7430: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
7440: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
7450: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
7460: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
7470: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7480: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
74a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
74b0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
74c0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
74d0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
7500: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7510: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7520: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
7530: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7550: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
7560: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7570: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
7580: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
7590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
75a0: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
75b0: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
75c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
75d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
75e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
75f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
7600: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7610: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7620: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7630: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7640: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7650: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7680: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
7690: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
76a0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
76b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
76c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
76d0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
76e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
76f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
7700: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
7710: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
7720: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
7730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7740: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
7750: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7760: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
7770: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
7780: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
7790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
77c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
77d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
77e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
77f0: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
7800: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7810: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7820: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
7830: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
7840: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
7850: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
7860: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
7870: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
7880: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
7890: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
78a0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
78b0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
78c0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
78d0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
78e0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
78f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7900: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
7910: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
7920: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
7930: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
7940: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
7950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7960: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7970: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7980: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7990: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
79a0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
79b0: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
79c0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
79d0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
79e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
79f0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
7a00: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7a10: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
7a20: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7a30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7a40: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
7a50: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
7a60: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
7a70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
7a80: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
7a90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7aa0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7ab0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
7ac0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7ad0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
7ae0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7af0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
7b00: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7b10: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7b20: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7b30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7b40: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7b50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7b60: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7b70: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
7b80: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
7b90: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
7ba0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7bb0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7bc0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
7bd0: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
7be0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
7bf0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7c00: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
7c10: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
7c20: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
7c30: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
7c40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7c50: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
7c60: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
7c70: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7c80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7c90: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
7ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
7cb0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
7cc0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
7cd0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
7ce0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
7cf0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
7d00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7d10: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7d20: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
7d30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
7d40: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
7d50: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7d60: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
7d70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7d80: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
7d90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7da0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
7db0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7dd0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
7de0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
7df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e00: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
7e10: 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e 74 20   paramter count 
7e20: 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20  is {1}.",..     
7e30: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
7e40: 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65 29 29  eIntPtr, value))
7e50: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
7e60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
7e70: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
7e80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7e90: 72 72 69 64 65 20 73 74 72 69 6e 67 20 42 69 6e  rride string Bin
7ea0: 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69  d_ParamName(SQLi
7eb0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7ec0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7ed0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
7ee0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
7ef0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7f00: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7f10: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7f20: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
7f30: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
7f40: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
7f50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
7f60: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
7f70: 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38       name = UTF8
7f80: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
7f90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7fa0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7fb0: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
7fc0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7fd0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
7fe0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
7ff0: 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  name = UTF8ToStr
8000: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8010: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8020: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
8030: 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ame(handle, inde
8040: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
8050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8060: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8070: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8080: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8090: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
80a0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
80b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
80c0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
80d0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
80e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
80f0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
8100: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
8110: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
8120: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
8130: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
8140: 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d   name is {{{2}}}
8150: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
8160: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
8170: 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29  r, index, name))
8180: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8190: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
81a0: 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ame;..    }.... 
81b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
81c0: 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61  ride int Bind_Pa
81d0: 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53  ramIndex(SQLiteS
81e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
81f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8200: 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69  lags flags, stri
8210: 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20  ng paramName).. 
8220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
8230: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8240: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
8250: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
8260: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64  .        int ind
8270: 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ex = UnsafeNativ
8280: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8290: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
82a0: 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f  index(handle, To
82b0: 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29  UTF8(paramName))
82c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
82d0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
82e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
82f0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
8300: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8310: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8320: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8330: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
8340: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
8350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8360: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
8370: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
8380: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8390: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
83a0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64  {0} paramter ind
83b0: 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d  ex of name {{{1}
83c0: 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20  }} is #{2}.",.. 
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
83e0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72  andleIntPtr, par
83f0: 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b  amName, index));
8400: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8410: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e         return in
8420: 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  dex;..    }.... 
8430: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8440: 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43  ride int ColumnC
8450: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
8460: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
8470: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
8480: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8490: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
84a0: 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73  mn_count(stmt._s
84b0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20  qlite_stmt);..  
84c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
84d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
84e0: 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53  ing ColumnName(S
84f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8500: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
8510: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
8520: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
8530: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
8540: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
8550: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
8560: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8570: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f  te3_column_name_
8580: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
8590: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
85a0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
85b0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
85c0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
85d0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
85e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
85f0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74  column_name(stmt
8600: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8610: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8620: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8630: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8640: 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
8650: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
8660: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8670: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
8680: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
8690: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
86a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
86b0: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74  3_column_type(st
86c0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
86d0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d   index);..    }.
86e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
86f0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
8700: 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74  ColumnType(SQLit
8710: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8720: 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20   int index, out 
8730: 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66  TypeAffinity nAf
8740: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a  finity)..    {..
8750: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
8760: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
8770: 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50  DARD..      IntP
8780: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
8790: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
87a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
87b0: 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  pe_interop(stmt.
87c0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
87d0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a  dex, out len);..
87e0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e  #else..      len
87f0: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e   = -1;..      In
8800: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
8810: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8820: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
8830: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
8840: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
8850: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e  .#endif..      n
8860: 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d  Affinity = Colum
8870: 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20  nAffinity(stmt, 
8880: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
8890: 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72   if (p != IntPtr
88a0: 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54  .Zero) return UT
88b0: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
88c0: 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d  n);..      else.
88d0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
88e0: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20    string[] ar = 
88f0: 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74  stmt.TypeDefinit
8900: 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69  ions;..        i
8910: 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  f (ar != null)..
8920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8930: 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c       if (index <
8940: 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72   ar.Length && ar
8950: 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29  [index] != null)
8960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8970: 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d  turn ar[index];.
8980: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8990: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
89a0: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
89b0: 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41      //switch (nA
89c0: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
89d0: 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f    //{..        /
89e0: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
89f0: 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
8a00: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
8a10: 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20  n "BIGINT";..   
8a20: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
8a30: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
8a40: 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  e:..        //  
8a50: 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45    return "DOUBLE
8a60: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
8a70: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
8a80: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
8a90: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42   //    return "B
8aa0: 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  LOB";..        /
8ab0: 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20  /  default:..   
8ac0: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
8ad0: 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20  n "TEXT";..     
8ae0: 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d     //}..      }.
8af0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8b00: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8b10: 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  int ColumnIndex(
8b20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8b30: 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c  stmt, string col
8b40: 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  umnName)..    {.
8b50: 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43  .      int x = C
8b60: 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
8b70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28  ;....      for (
8b80: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78  int n = 0; n < x
8b90: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d  ; n++)..      {.
8ba0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
8bb0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75  ing.Compare(colu
8bc0: 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61  mnName, ColumnNa
8bd0: 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72  me(stmt, n), Str
8be0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
8bf0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
8c00: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
8c10: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
8c20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75     }..      retu
8c30: 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn -1;..    }...
8c40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8c50: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
8c60: 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65  lumnOriginalName
8c70: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8c80: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
8c90: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
8ca0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8cb0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
8cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
8cd0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
8ce0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8cf0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
8d00: 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  gin_name_interop
8d10: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8d20: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
8d30: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
8d40: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
8d50: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
8d60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8d70: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8d80: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74  origin_name(stmt
8d90: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8da0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8db0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8dc0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8dd0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
8de0: 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51  nDatabaseName(SQ
8df0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8e00: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
8e10: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
8e20: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8e30: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
8e40: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
8e50: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
8e60: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8e70: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
8e80: 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  se_name_interop(
8e90: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8ea0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
8eb0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
8ec0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
8ed0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8ee0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8ef0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
8f00: 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d  atabase_name(stm
8f10: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8f20: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
8f30: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
8f40: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8f50: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
8f60: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69  mnTableName(SQLi
8f70: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8f80: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
8f90: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
8fa0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
8fb0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
8fc0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
8fd0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
8fe0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8ff0: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
9000: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
9010: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9020: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
9030: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
9040: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
9050: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
9060: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9070: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
9080: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
9090: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
90a0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
90b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
90c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
90d0: 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61  d ColumnMetaData
90e0: 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65  (string dataBase
90f0: 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20  , string table, 
9100: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f  string column, o
9110: 75 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79  ut string dataTy
9120: 70 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  pe, out string c
9130: 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20  ollateSequence, 
9140: 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c  out bool notNull
9150: 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61  , out bool prima
9160: 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20  ryKey, out bool 
9170: 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a  autoIncrement)..
9180: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
9190: 50 74 72 20 64 61 74 61 54 79 70 65 50 74 72 3b  Ptr dataTypePtr;
91a0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63  ..      IntPtr c
91b0: 6f 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20  ollSeqPtr;..    
91c0: 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d    int nnotNull;.
91d0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d  .      int nprim
91e0: 61 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69  aryKey;..      i
91f0: 6e 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20  nt nautoInc;..  
9200: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9210: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  ode n;..      in
9220: 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20  t dtLen;..      
9230: 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69  int csLen;....#i
9240: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9250: 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  RD..      n = Un
9260: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9270: 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
9280: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f  column_metadata_
9290: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
92a0: 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20  UTF8(dataBase), 
92b0: 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54  ToUTF8(table), T
92c0: 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f  oUTF8(column), o
92d0: 75 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20  ut dataTypePtr, 
92e0: 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20  out collSeqPtr, 
92f0: 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75  out nnotNull, ou
9300: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f  t nprimaryKey, o
9310: 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74  ut nautoInc, out
9320: 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65   dtLen, out csLe
9330: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
9340: 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20    dtLen = -1;.. 
9350: 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b       csLen = -1;
9360: 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  ....      n = Un
9370: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9380: 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
9390: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
93a0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
93b0: 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74  aBase), ToUTF8(t
93c0: 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f  able), ToUTF8(co
93d0: 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54  lumn), out dataT
93e0: 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c  ypePtr, out coll
93f0: 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74  SeqPtr, out nnot
9400: 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61  Null, out nprima
9410: 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f  ryKey, out nauto
9420: 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  Inc);..#endif.. 
9430: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
9440: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
9450: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
9460: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
9470: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
9480: 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70  ...      dataTyp
9490: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
94a0: 28 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74  (dataTypePtr, dt
94b0: 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c  Len);..      col
94c0: 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55  lateSequence = U
94d0: 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
94e0: 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d  SeqPtr, csLen);.
94f0: 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c  ...      notNull
9500: 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20   = (nnotNull == 
9510: 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61  1);..      prima
9520: 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72  ryKey = (nprimar
9530: 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  yKey == 1);..   
9540: 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74     autoIncrement
9550: 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20   = (nautoInc == 
9560: 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  1);..    }....  
9570: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9580: 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f  ide double GetDo
9590: 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  uble(SQLiteState
95a0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
95b0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
95c0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
95d0: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
95e0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
95f0: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
9600: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9610: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
9620: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e  umn_double(stmt.
9630: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9640: 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  dex);..#else..  
9650: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
9660: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9670: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e  column_double_in
9680: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
9690: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
96a0: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  out value);..#en
96b0: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
96c0: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
96d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
96e0: 6f 76 65 72 72 69 64 65 20 73 62 79 74 65 20 47  override sbyte G
96f0: 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
9700: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9710: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
9720: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
9730: 63 68 65 63 6b 65 64 28 28 73 62 79 74 65 29 28  checked((sbyte)(
9740: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
9750: 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
9760: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
9770: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9780: 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
9790: 74 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  tByte(SQLiteStat
97a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
97b0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
97c0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
97d0: 65 63 6b 65 64 28 28 62 79 74 65 29 28 47 65 74  ecked((byte)(Get
97e0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
97f0: 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
9800: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
9810: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9820: 72 72 69 64 65 20 73 68 6f 72 74 20 47 65 74 49  rride short GetI
9830: 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65  nt16(SQLiteState
9840: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9850: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
9860: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
9870: 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47 65 74  cked((short)(Get
9880: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
9890: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
98a0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
98b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
98c0: 76 65 72 72 69 64 65 20 75 73 68 6f 72 74 20 47  verride ushort G
98d0: 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53  etUInt16(SQLiteS
98e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
98f0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
9900: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
9910: 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74  nchecked((ushort
9920: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
9930: 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
9940: 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
9950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9960: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
9970: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
9980: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9990: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
99a0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
99b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
99c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
99d0: 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  mn_int(stmt._sql
99e0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
99f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9a00: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9a10: 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32  e uint GetUInt32
9a20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9a30: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
9a40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9a50: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
9a60: 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28  ((uint)GetInt32(
9a70: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
9a80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9a90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
9aa0: 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c  ong GetInt64(SQL
9ab0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9ac0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
9ad0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67     {..      long
9ae0: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
9af0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
9b00: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
9b10: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
9b20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9b30: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
9b40: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9b50: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73  t, index);..#els
9b60: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
9b70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9b80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
9b90: 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  4_interop(stmt._
9ba0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9bb0: 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  ex, out value);.
9bc0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
9bd0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
9be0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9bf0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f  nal override ulo
9c00: 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c  ng GetUInt64(SQL
9c10: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9c20: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
9c30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
9c40: 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c  rn unchecked((ul
9c50: 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d  ong)GetInt64(stm
9c60: 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
9c70: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9c80: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
9c90: 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74  ng GetText(SQLit
9ca0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9cb0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
9cc0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
9cd0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
9ce0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
9cf0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
9d00: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
9d10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9d20: 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
9d30: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
9d40: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
9d50: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
9d60: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
9d70: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
9d80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9d90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9da0: 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71  mn_text(stmt._sq
9db0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9dc0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
9dd0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9de0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9df0: 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65  DateTime GetDate
9e00: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
9e10: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9e20: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
9e30: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9e40: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
9e50: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
9e60: 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61   ToDateTime(Unsa
9e70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9e80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
9e90: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
9ea0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9eb0: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
9ec0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
9ed0: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
9ee0: 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69  eTime(UnsafeNati
9ef0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9f00: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
9f10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9f20: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
9f30: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
9f40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9f50: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79  rride long GetBy
9f60: 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tes(SQLiteStatem
9f70: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9f80: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
9f90: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
9fa0: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
9fb0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
9fc0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
9fd0: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
9fe0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9ff0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
a000: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a010: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
a020: 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
a030: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
a040: 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
a050: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
a060: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
a070: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
a080: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
a090: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
a0a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
a0b0: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
a0c0: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
a0d0: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
a0e0: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
a0f0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
a100: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
a110: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
a120: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
a130: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
a140: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
a150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a160: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
a170: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a180: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a190: 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69  _blob(stmt._sqli
a1a0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
a1b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
a1c0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
a1d0: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
a1e0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
a1f0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
a200: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
a210: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
a220: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a230: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
a240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
a250: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
a260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a270: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
a280: 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
a290: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a2a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
a2b0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
a2c0: 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
a2d0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
a2e0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
a2f0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
a300: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
a310: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
a320: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
a330: 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
a340: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
a350: 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
a360: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
a370: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
a380: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
a390: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
a3a0: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
a3b0: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
a3c0: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
a3d0: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
a3e0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
a3f0: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
a400: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
a410: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
a420: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
a430: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
a440: 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
a450: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
a460: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
a470: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
a480: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
a490: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
a4a0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
a4b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a4c0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
a4d0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
a4e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a4f0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a500: 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
a510: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
a520: 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
a530: 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
a540: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a550: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
a560: 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
a570: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
a580: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
a590: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
a5a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a5b0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
a5c0: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
a5d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a5e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
a5f0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
a600: 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
a610: 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
a620: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
a630: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
a640: 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
a650: 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
a660: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
a670: 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20  k funcfinal)..  
a680: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
a690: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
a6a0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
a6b0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
a6c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a6d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
a6e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
a6f0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
a700: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
a710: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
a720: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
a730: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
a740: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
a750: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
a760: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
a770: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a780: 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
a790: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a7a0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
a7b0: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
a7c0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
a7d0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
a7e0: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
a7f0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
a800: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
a810: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
a820: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73   ? 1 : 0);..#els
a830: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
a840: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a850: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
a860: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
a870: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
a880: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
a890: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
a8a0: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
a8b0: 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66  inal);..      if
a8c0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
a8d0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
a8e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a8f0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
a900: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
a910: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
a920: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
a930: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
a940: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
a950: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
a960: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
a970: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a980: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a990: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a9a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a9b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a9c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a9d0: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f  de void CreateCo
a9e0: 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  llation(string s
a9f0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c  trCollation, SQL
aa00: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
aa10: 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  c, SQLiteCollati
aa20: 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20  on func16)..    
aa30: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
aa40: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
aa50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
aa60: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
aa70: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
aa80: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
aa90: 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e  ion), 2, IntPtr.
aaa0: 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a  Zero, func16);..
aab0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
aac0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
aad0: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
aae0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
aaf0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
ab00: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
ab10: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
ab20: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
ab30: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66  func);..      if
ab40: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
ab50: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
ab60: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
ab70: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
ab80: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
ab90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
aba0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
abb0: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
abc0: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
abd0: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
abe0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
abf0: 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
ac00: 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
ac10: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ac20: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
ac30: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
ac40: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
ac50: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
ac60: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
ac70: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
ac80: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
ac90: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
aca0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
acb0: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
acc0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
acd0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
ace0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
acf0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ad00: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
ad10: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
ad20: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
ad30: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
ad40: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
ad50: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
ad60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
ad70: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
ad80: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
ad90: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
ada0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
adb0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
adc0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
add0: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
ade0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
adf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
ae00: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
ae10: 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
ae20: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
ae30: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
ae40: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
ae50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
ae60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ae70: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
ae80: 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
ae90: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
aea0: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
aeb0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
aec0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
aed0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
aee0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
aef0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
af00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
af10: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
af20: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
af30: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
af40: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
af50: 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
af60: 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
af70: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
af80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
af90: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
afa0: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
afb0: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
afc0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
afd0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
afe0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
aff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b000: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
b010: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
b020: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
b030: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
b040: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
b050: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
b060: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
b070: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
b080: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
b090: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
b0a0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
b0b0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
b0c0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
b0d0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
b0e0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
b0f0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
b100: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
b110: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
b120: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
b130: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
b140: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
b150: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
b160: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
b170: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
b180: 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
b190: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
b1a0: 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
b1b0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
b1c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b1d0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
b1e0: 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
b1f0: 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
b200: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
b210: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
b220: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
b230: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
b240: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
b250: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
b260: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b270: 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
b280: 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
b290: 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
b2a0: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
b2b0: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
b2c0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
b2d0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
b2e0: 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
b2f0: 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
b300: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
b310: 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
b320: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74   len;..      int
b330: 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e   type;..      in
b340: 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e  t enc;..      In
b350: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
b360: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b370: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
b380: 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
b390: 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20  text, out type, 
b3a0: 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e  out enc, out len
b3b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
b3c0: 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
b3d0: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
b3e0: 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
b3f0: 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
b400: 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
b410: 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
b420: 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
b430: 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
b440: 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
b450: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
b460: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
b470: 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
b480: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
b490: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
b4a0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
b4b0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
b4c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b4d0: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
b4e0: 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
b4f0: 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
b500: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
b510: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
b520: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
b530: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
b540: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
b550: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b560: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
b570: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
b580: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
b590: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
b5a0: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
b5b0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
b5c0: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
b5d0: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
b5e0: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
b5f0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
b600: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
b610: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
b620: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
b630: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
b640: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
b650: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
b660: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
b670: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
b680: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
b690: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
b6a0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
b6b0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
b6c0: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
b6d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b6e0: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
b6f0: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
b700: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
b710: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
b720: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
b730: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
b740: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
b750: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
b760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
b770: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
b780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
b790: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
b7a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b7b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
b7c0: 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
b7d0: 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
b7e0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
b7f0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
b800: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
b810: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
b820: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
b830: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b840: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
b850: 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
b860: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73  #else..      Uns
b870: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b880: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
b890: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74  ouble_interop(pt
b8a0: 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  r, out value);..
b8b0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
b8c0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
b8d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b8e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
b8f0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
b900: 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  32(IntPtr ptr)..
b910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
b920: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
b930: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b940: 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d  value_int(ptr);.
b950: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b960: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b970: 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
b980: 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70  ueInt64(IntPtr p
b990: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
b9a0: 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a    Int64 value;..
b9b0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
b9c0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
b9d0: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
b9e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b9f0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
ba00: 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c  int64(ptr);..#el
ba10: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
ba20: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ba30: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
ba40: 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  4_interop(ptr, o
ba50: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
ba60: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
ba70: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
ba80: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ba90: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
baa0: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
bab0: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
bac0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
bad0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
bae0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
baf0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
bb00: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
bb10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bb20: 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
bb30: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e  rop(ptr, out len
bb40: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
bb50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
bb60: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
bb70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bb80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
bb90: 74 28 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65  t(ptr), -1);..#e
bba0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
bbb0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bbc0: 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74  ride TypeAffinit
bbd0: 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54  y GetParamValueT
bbe0: 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ype(IntPtr ptr).
bbf0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
bc00: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
bc10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bc20: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29  _value_type(ptr)
bc30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bc40: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
bc50: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f  e void ReturnBlo
bc60: 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  b(IntPtr context
bc70: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
bc80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
bc90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bca0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
bcb0: 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76  _blob(context, v
bcc0: 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67  alue, value.Leng
bcd0: 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29  th, (IntPtr)(-1)
bce0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
bcf0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bd00: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f  de void ReturnDo
bd10: 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74  uble(IntPtr cont
bd20: 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  ext, double valu
bd30: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
bd40: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
bd50: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
bd60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bd70: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
bd80: 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65  ult_double(conte
bd90: 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  xt, value);..#el
bda0: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
bdb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bdc0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
bdd0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  ble_interop(cont
bde0: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
bdf0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
be00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
be10: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
be20: 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72  turnError(IntPtr
be30: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
be40: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
be50: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
be60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
be70: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
be80: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
be90: 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e  alue), value.Len
bea0: 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
beb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
bec0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
bed0: 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f  nInt32(IntPtr co
bee0: 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65  ntext, int value
bef0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
bf00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
bf10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
bf20: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
bf30: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
bf40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bf50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
bf60: 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20  urnInt64(IntPtr 
bf70: 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61  context, long va
bf80: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
bf90: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
bfa0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
bfb0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
bfc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
bfd0: 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
bfe0: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
bff0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
c000: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c010: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
c020: 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  t64_interop(cont
c030: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
c040: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
c050: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c060: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
c070: 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20  turnNull(IntPtr 
c080: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
c090: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
c0a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c0b0: 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63  e3_result_null(c
c0c0: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
c0d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c0e0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
c0f0: 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20  turnText(IntPtr 
c100: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
c110: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
c120: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
c130: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a  ToUTF8(value);..
c140: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
c150: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c160: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
c170: 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61  ntext, ToUTF8(va
c180: 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  lue), b.Length -
c190: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
c1a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c1b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c1c0: 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67  de IntPtr Aggreg
c1d0: 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74  ateContext(IntPt
c1e0: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
c1f0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
c200: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c210: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
c220: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
c230: 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20  ntext, 1);..    
c240: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
c250: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
c260: 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
c270: 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f  led extension lo
c280: 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e  ading by SQLite.
c290: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
c2a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
c2b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66  aram name="bOnOf
c2c0: 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  f">..    /// Tru
c2d0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64  e to enable load
c2e0: 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e  ing of extension
c2f0: 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61  s, false to disa
c300: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
c310: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
c320: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
c330: 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73  id SetLoadExtens
c340: 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29  ion(bool bOnOff)
c350: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c360: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c370: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c380: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c390: 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
c3a0: 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
c3b0: 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f       _sql, (bOnO
c3c0: 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
c3d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
c3e0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c3f0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
c400: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c410: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
c420: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
c430: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c440: 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20  ..    /// Loads 
c450: 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69  a SQLite extensi
c460: 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20  on library from 
c470: 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d  the named file..
c480: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
c490: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
c4a0: 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
c4b0: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
c4c0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79  e name of the dy
c4d0: 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61  namic link libra
c4e0: 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  ry file containi
c4f0: 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
c500: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
c510: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
c520: 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61  ram name="procNa
c530: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
c540: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78  e name of the ex
c550: 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20  ported function 
c560: 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  used to initiali
c570: 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ze the extension
c580: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75  ...    /// If nu
c590: 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  ll, the default 
c5a0: 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  "sqlite3_extensi
c5b0: 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65  on_init" will be
c5c0: 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20   used...    /// 
c5d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
c5e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c5f0: 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69  void LoadExtensi
c600: 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61  on(string fileNa
c610: 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e  me, string procN
c620: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
c630: 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d       if (fileNam
c640: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
c650: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c660: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
c670: 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d  ception("fileNam
c680: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
c690: 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20  IntPtr pError = 
c6a0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
c6b0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
c6c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c6d0: 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46      byte[] utf8F
c6e0: 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  ileName = UTF8En
c6f0: 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
c700: 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20  ytes(fileName + 
c710: 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  '\0');..        
c720: 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50      byte[] utf8P
c730: 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  rocName = null;.
c740: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
c750: 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e  f (procName != n
c760: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c770: 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61        utf8ProcNa
c780: 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
c790: 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
c7a0: 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29  procName + '\0')
c7b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c7c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c7d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c7e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c7f0: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
c800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c810: 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65    _sql, utf8File
c820: 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61  Name, utf8ProcNa
c830: 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  me, ref pError);
c840: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c850: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c860: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
c880: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c890: 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54  ception(n, UTF8T
c8a0: 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20  oString(pError, 
c8b0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  -1));..        }
c8c0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
c8d0: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
c8e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45            if (pE
c8f0: 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
c900: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
c910: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c920: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
c930: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c940: 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  _free(pError);..
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
c970: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
c980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
c990: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
c9a0: 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73  / Enables or dis
c9b0: 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72  abled extended r
c9c0: 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75  esult codes retu
c9d0: 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a  rned by SQLite..
c9e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c9f0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78  rride void SetEx
ca00: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
ca10: 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  s(bool bOnOff)..
ca20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
ca30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ca40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ca50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74  hods.sqlite3_ext
ca60: 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
ca70: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  es(..          _
ca80: 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
ca90: 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
caa0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
cab0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
cac0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
cad0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
cae0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
caf0: 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
cb00: 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
cb10: 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  e error code..  
cb20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cb30: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
cb40: 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29  ode ResultCode()
cb50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
cb60: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
cb70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cb80: 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  3_errcode(_sql);
cb90: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
cba0: 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
cbb0: 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65  QLite extended e
cbc0: 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
cbd0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cbe0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
cbf0: 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43   ExtendedResultC
cc00: 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
cc10: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
cc20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
cc30: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
cc40: 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
cc50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
cc60: 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
cc70: 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
cc80: 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
cc90: 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
cca0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ccb0: 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28  void LogMessage(
ccc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
ccd0: 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
cce0: 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
ccf0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
cd00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cd10: 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64  ite3_log(iErrCod
cd20: 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61  e, ToUTF8(zMessa
cd30: 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ge));..    }....
cd40: 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45  #if INTEROP_CODE
cd50: 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  C..    internal 
cd60: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
cd70: 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  tPassword(byte[]
cd80: 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d   passwordBytes).
cd90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
cda0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
cdb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cdc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65  thods.sqlite3_ke
cdd0: 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64  y(_sql, password
cde0: 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42  Bytes, passwordB
cdf0: 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
ce00: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
ce10: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
ce20: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
ce30: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
ce40: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
ce50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ce60: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ce70: 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
ce80: 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
ce90: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
cea0: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
ceb0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
cec0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ced0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  ds.sqlite3_rekey
cee0: 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f  (_sql, newPasswo
cef0: 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73  rdBytes, (newPas
cf00: 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75  swordBytes == nu
cf10: 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73  ll) ? 0 : newPas
cf20: 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
cf30: 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
cf40: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
cf50: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
cf60: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
cf70: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
cf80: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  r());..    }..#e
cf90: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
cfa0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
cfb0: 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b  id SetUpdateHook
cfc0: 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c  (SQLiteUpdateCal
cfd0: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
cfe0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
cff0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d000: 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
d010: 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
d020: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
d030: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d040: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d050: 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53   SetCommitHook(S
d060: 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62  QLiteCommitCallb
d070: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
d080: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
d090: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d0a0: 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28  te3_commit_hook(
d0b0: 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
d0c0: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
d0d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d0e0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
d0f0: 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  etTraceCallback(
d100: 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62  SQLiteTraceCallb
d110: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
d120: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
d130: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d140: 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20  te3_trace(_sql, 
d150: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
d160: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
d170: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d180: 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c  ide void SetRoll
d190: 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52  backHook(SQLiteR
d1a0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
d1b0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
d1c0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
d1d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d1e0: 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73  rollback_hook(_s
d1f0: 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
d200: 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
d210: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
d220: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c  ry>..    /// All
d230: 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20  ows the setting 
d240: 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c  of a logging cal
d250: 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79  lback invoked by
d260: 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a   SQLite when a..
d270: 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e      /// log even
d280: 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20  t occurs.  Only 
d290: 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  one callback may
d2a0: 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c   be set.  If NUL
d2b0: 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20  L is passed,..  
d2c0: 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e    /// the loggin
d2d0: 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e  g callback is un
d2e0: 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20  registered...   
d2f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d300: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
d310: 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20  name="func">The 
d320: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
d330: 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61  n to invoke.</pa
d340: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
d350: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
d360: 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
d370: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
d380: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
d390: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65  LiteErrorCode Se
d3a0: 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c  tLogCallback(SQL
d3b0: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66  iteLogCallback f
d3c0: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
d3d0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d3e0: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
d3f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d400: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67  lite3_config_log
d410: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
d420: 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
d430: 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
d440: 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _LOG, func, IntP
d450: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20  tr.Zero);....   
d460: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
d470: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d4e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
d4f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61  y>..    /// Crea
d500: 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65  tes a new SQLite
d510: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62   backup object b
d520: 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76  ased on the prov
d530: 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e  ided destination
d540: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
d550: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
d560: 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
d570: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
d580: 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f  s the one..    /
d590: 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
d5a0: 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20  th this object. 
d5b0: 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20   The source and 
d5c0: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
d5d0: 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  base..    /// co
d5e0: 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74  nnections cannot
d5f0: 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20   be the same... 
d600: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d610: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
d620: 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22  m name="destCnn"
d630: 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
d640: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d650: 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
d660: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d670: 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68  me="destName">Th
d680: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
d690: 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
d6a0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
d6b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63  aram name="sourc
d6c0: 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63  eName">The sourc
d6d0: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e  e database name.
d6e0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
d6f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
d700: 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63  ewly created bac
d710: 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74  kup object.</ret
d720: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
d730: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
d740: 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61  iteBackup Initia
d750: 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20  lizeBackup(..   
d760: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
d770: 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a  ction destCnn,..
d780: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
d790: 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  estName,..      
d7a0: 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e    string sourceN
d7b0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ame..        )..
d7c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
d7d0: 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75  f (destCnn == nu
d7e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
d7f0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
d800: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
d810: 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a  ("destCnn");....
d820: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
d830: 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
d840: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d850: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
d860: 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74  lException("dest
d870: 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
d880: 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d     if (sourceNam
d890: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
d8a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d8b0: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
d8c0: 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e  ception("sourceN
d8d0: 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
d8e0: 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71    SQLite3 destSq
d8f0: 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e  lite3 = destCnn.
d900: 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b  _sql as SQLite3;
d910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d920: 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e  destSqlite3 == n
d930: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d940: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
d950: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a  mentException(..
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e  "Destination con
d980: 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77  nection has no w
d990: 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20  rapper.",..     
d9a0: 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74             "dest
d9b0: 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
d9c0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
d9d0: 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e  onHandle destHan
d9e0: 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65  dle = destSqlite
d9f0: 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  3._sql;....     
da00: 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c     if (destHandl
da10: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
da20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
da30: 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
da40: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
da50: 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69        "Destinati
da60: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  on connection ha
da70: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
da80: 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  dle.",..        
da90: 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
daa0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
dab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
dac0: 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64  andle sourceHand
dad0: 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  le = _sql;....  
dae0: 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
daf0: 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  Handle == null).
db00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
db10: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
db20: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
db30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
db40: 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65     "Source conne
db50: 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
db60: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
db70: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
db80: 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f  ] zDestName = To
db90: 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d  UTF8(destName);.
dba0: 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
dbb0: 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f  zSourceName = To
dbc0: 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29  UTF8(sourceName)
dbd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
dbe0: 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
dbf0: 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e  backupHandle = n
dc00: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
dc10: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
dc30: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
dc40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
dc50: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
dc60: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
dc70: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
dc80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dc90: 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 61 63        IntPtr bac
dca0: 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  kup = UnsafeNati
dcb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
dcc0: 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a  3_backup_init(..
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73  destHandle, zDes
dcf0: 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e  tName, sourceHan
dd00: 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65  dle, zSourceName
dd10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
dd20: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
dd30: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
dd50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
dd60: 63 65 70 74 69 6f 6e 28 52 65 73 75 6c 74 43 6f  ception(ResultCo
dd70: 64 65 28 29 2c 20 47 65 74 4c 61 73 74 45 72 72  de(), GetLastErr
dd80: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
dd90: 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64        backupHand
dda0: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42  le = new SQLiteB
ddb0: 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74  ackupHandle(dest
ddc0: 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b  Handle, backup);
ddd0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
dde0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
ddf0: 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d  w SQLiteBackup(.
de00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
de10: 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  s, backupHandle,
de20: 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
de30: 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
de40: 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndle,..         
de50: 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b     zSourceName);
de60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
de70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
de80: 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20    /// Copies up 
de90: 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20  to N pages from 
dea0: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
deb0: 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
dec0: 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
ded0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
dee0: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
def0: 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
df00: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
df10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
df20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
df30: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
df40: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65  up object to use
df50: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
df60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
df70: 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nPage">..    ///
df80: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
df90: 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65  ages to copy, ne
dfa0: 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61  gative to copy a
dfb0: 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67  ll remaining pag
dfc0: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
dfd0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
dfe0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
dff0: 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74  y">..    /// Set
e000: 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20   to true if the 
e010: 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20  operation needs 
e020: 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75  to be retried du
e030: 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20  e to database.. 
e040: 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69     /// locking i
e050: 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65  ssues; otherwise
e060: 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d  , set to false..
e070: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
e080: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
e090: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  rns>..    /// Tr
e0a0: 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ue if there are 
e0b0: 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65  more pages to be
e0c0: 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f   copied, false o
e0d0: 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
e0e0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
e0f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e100: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61  ride bool StepBa
e110: 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
e120: 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
e130: 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  up,..        int
e140: 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20   nPage,..       
e150: 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d   out bool retry.
e160: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
e170: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79  {..        retry
e180: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
e190: 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
e1a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e1b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e1c0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
e1d0: 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
e1e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
e1f0: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
e200: 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
e210: 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
e220: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
e230: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
e240: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e250: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
e260: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
e270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e280: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
e290: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
e2a0: 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
e2b0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
e2c0: 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
e2d0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
e2e0: 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
e2f0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
e300: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e310: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
e320: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
e330: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
e340: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
e350: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
e360: 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
e370: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e380: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e390: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e3a0: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
e3b0: 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e  tep(handlePtr, n
e3c0: 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Page);..        
e3d0: 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
e3e0: 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a  lt = n; /* NOTE:
e3f0: 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79   Save for use by
e400: 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a   FinishBackup. *
e410: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  /....        if 
e420: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
e430: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
e440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e450: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
e460: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e470: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
e480: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e490: 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20  .Busy)..        
e4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
e4b0: 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
e4c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e4d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
e4e0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
e4f0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
e500: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29  rrorCode.Locked)
e510: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e520: 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
e530: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
e540: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
e550: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e560: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
e570: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
e580: 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20  de.Done)..      
e590: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e5a0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
e5b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e5c0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
e5d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e5e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
e5f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
e600: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
e610: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
e620: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e630: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
e640: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
e650: 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
e660: 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
e670: 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
e680: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
e690: 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
e6a0: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61  ation database a
e6b0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
e6c0: 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
e6d0: 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a    /// backup obj
e6e0: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
e6f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e700: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
e710: 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
e720: 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
e730: 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
e740: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
e750: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
e760: 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
e770: 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e   copied.</return
e780: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
e790: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
e7a0: 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a  mainingBackup(..
e7b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
e7c0: 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
e7d0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
e7e0: 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
e7f0: 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
e800: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e810: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
e820: 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
e830: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
e840: 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
e850: 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
e860: 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
e870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e880: 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
e890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e8a0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
e8b0: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
e8c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e8d0: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
e8e0: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
e8f0: 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
e900: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
e910: 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
e920: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
e930: 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
e940: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
e950: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e960: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
e970: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
e990: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
e9a0: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
e9b0: 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
e9c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
e9d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e9e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
e9f0: 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61  kup_remaining(ha
ea00: 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
ea10: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
ea20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
ea30: 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
ea40: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
ea50: 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
ea60: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
ea70: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
ea80: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
ea90: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
eaa0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
eab0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
eac0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
ead0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
eae0: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
eaf0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
eb00: 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20  turns>The total 
eb10: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
eb20: 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
eb30: 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73  tabase.</returns
eb40: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
eb50: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67  override int Pag
eb60: 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20  eCountBackup(.. 
eb70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
eb80: 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
eb90: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
eba0: 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
ebb0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ebc0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ebd0: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
ebe0: 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
ebf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
ec00: 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
ec10: 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
ec20: 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
ec30: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
ec40: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
ec60: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
ec70: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
ec80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec90: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
eca0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
ecb0: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
ecc0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
ecd0: 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
ece0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
ecf0: 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
ed00: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
ed10: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ed20: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
ed30: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
ed50: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
ed60: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
ed70: 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
ed80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
ed90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
eda0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
edb0: 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e  up_pagecount(han
edc0: 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
edd0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
ede0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
edf0: 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75  stroys the backu
ee00: 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e  p object, rollin
ee10: 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75  g back any backu
ee20: 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  p that may be in
ee30: 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73  ..    /// proges
ee40: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
ee50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ee60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
ee70: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
ee80: 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f  object to destro
ee90: 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
eea0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
eeb0: 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  e void FinishBac
eec0: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
eed0: 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
eee0: 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
eef0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
ef00: 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
ef10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
ef20: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
ef30: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
ef40: 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
ef50: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
ef60: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
ef70: 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
ef80: 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
ef90: 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
efa0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
efb0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
efc0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
efd0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
efe0: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
eff0: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
f000: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
f010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
f020: 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
f030: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
f040: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
f050: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
f060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f070: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
f080: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
f090: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
f0a0: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
f0b0: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
f0c0: 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
f0d0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
f0e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f0f0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
f100: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f110: 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61  backup_finish(ha
f120: 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 20  ndlePtr);..     
f130: 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e     handle.SetHan
f140: 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d  dleAsInvalid();.
f150: 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e  ...#if COUNT_HAN
f160: 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20  DLE..        if 
f170: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
f180: 72 43 6f 64 65 2e 4f 6b 29 20 68 61 6e 64 6c 65  rCode.Ok) handle
f190: 2e 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29  .WasReleasedOk()
f1a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
f1b0: 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53       if ((n != S
f1c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f1d0: 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b  k) && (n != back
f1e0: 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
f1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f200: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
f210: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
f220: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
f230: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
f240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f2a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f2b0: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
f2c0: 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
f2d0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
f2e0: 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
f2f0: 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
f300: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
f310: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
f320: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f330: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
f340: 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
f350: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
f360: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
f370: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f380: 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
f390: 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
f3a0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
f3b0: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
f3c0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
f3d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f3e0: 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61  de bool IsInitia
f3f0: 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
f400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
f410: 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
f420: 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
f430: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f440: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
f450: 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
f460: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f470: 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
f480: 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
f490: 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
f4a0: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
f4b0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f4c0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
f4d0: 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
f4e0: 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
f4f0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
f500: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
f510: 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
f520: 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
f530: 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
f540: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
f550: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
f560: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
f570: 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49  tic bool StaticI
f580: 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
f590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
f5a0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55  /..        // BU
f5b0: 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61  GFIX: Prevent ra
f5c0: 63 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74  ces with other t
f5d0: 68 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20  hreads for this 
f5e0: 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75  entire block, du
f5f0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
f600: 20 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79        to the try
f610: 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69  /finally semanti
f620: 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  cs.  See ticket 
f630: 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20  [72905c9a77]... 
f640: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
f650: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
f660: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
f670: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f680: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
f690: 54 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61  TE: Save the sta
f6a0: 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e  te of the loggin
f6b0: 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e  g class and then
f6c0: 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20   restore it..   
f6d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
f6e0: 20 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64    after we are d
f6f0: 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67  one to avoid log
f700: 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61  ging too many fa
f710: 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20  lse errors...   
f720: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
f730: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
f740: 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c  vedEnabled = SQL
f750: 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d  iteLog.Enabled;.
f760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
f770: 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
f780: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
f790: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
f7a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f7b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f7d0: 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74  / NOTE: This met
f7e0: 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65  hod [ab]uses the
f7f0: 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
f800: 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20  e will always.. 
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f820: 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  /       return S
f830: 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20  QLITE_ERROR for 
f840: 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66  any unknown conf
f850: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
f860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f870: 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65    //       *unle
f880: 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c  ss* the SQLite l
f890: 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
f8a0: 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
f8b0: 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  zed...          
f8c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
f8d0: 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77  n that case it w
f8e0: 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72  ill always retur
f8f0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e  n SQLITE_MISUSE.
f900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f910: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
f920: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f930: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
f940: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f950: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f  qlite3_config_no
f960: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
f970: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
f980: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
f990: 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29  ITE_CONFIG_NONE)
f9a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f9b0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20       return (rc 
f9c0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
f9d0: 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20  de.Misuse);..   
f9e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f9f0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
fa00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
fa30: 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64  d = savedEnabled
fa40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
fa50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
fa60: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
fa70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
fa80: 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e   Helper function
fa90: 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63   to retrieve a c
faa0: 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72  olumn of data fr
fab0: 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61  om an active sta
fac0: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
fad0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
fae0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
faf0: 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
fb00: 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70  ement being step
fb10: 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61  ()'d through</pa
fb20: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
fb30: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
fb40: 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64  ">The column ind
fb50: 65 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  ex to retrieve</
fb60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
fb70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
fb80: 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61  ">The type of da
fb90: 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ta contained in 
fba0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  the column.  If 
fbb0: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  Uninitialized, t
fbc0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  his function wil
fbd0: 6c 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64  l retrieve the d
fbe0: 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74  atatype informat
fbf0: 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
fc00: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
fc10: 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20  eturns the data 
fc20: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
fc30: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
fc40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  ernal override o
fc50: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53  bject GetValue(S
fc60: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fc70: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
fc80: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d  SQLiteType typ).
fc90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
fca0: 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69   (IsNull(stmt, i
fcb0: 6e 64 65 78 29 29 20 72 65 74 75 72 6e 20 44 42  ndex)) return DB
fcc0: 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
fcd0: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
fce0: 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69  aff = typ.Affini
fcf0: 74 79 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20  ty;..      Type 
fd00: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
fd10: 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
fd20: 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  != DbType.Object
fd30: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
fd40: 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f      t = SQLiteCo
fd50: 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
fd60: 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20  ToType(typ);..  
fd70: 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65        aff = Type
fd80: 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a  ToAffinity(t);..
fd90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
fda0: 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20   switch (aff).. 
fdb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fdc0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
fdd0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
fde0: 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
fdf0: 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26  == DbType.Guid &
fe00: 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d  & typ.Affinity =
fe10: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
fe20: 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
fe30: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
fe40: 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  d(GetText(stmt, 
fe50: 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  index));....    
fe60: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69        int n = (i
fe70: 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74  nt)GetBytes(stmt
fe80: 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c  , index, 0, null
fe90: 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  , 0, 0);..      
fea0: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e      byte[] b = n
feb0: 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20  ew byte[n];..   
fec0: 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28         GetBytes(
fed0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
fee0: 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  b, 0, n);....   
fef0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
ff00: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
ff10: 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a  id && n == 16)..
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ff30: 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d  rn new Guid(b);.
ff40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
ff50: 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20  urn b;..        
ff60: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
ff70: 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20  y.DateTime:..   
ff80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
ff90: 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20  tDateTime(stmt, 
ffa0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
ffb0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
ffc0: 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
ffd0: 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
ffe0: 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44  ull) return GetD
fff0: 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
10000 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  x);..          r
10010 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
10020 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62  angeType(GetDoub
10030 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
10040 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
10050 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
10060 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
10070 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
10080 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
10090 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
100a0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
100b0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
100c0 53 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  SByte)) return G
100d0 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e  etSByte(stmt, in
100e0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
100f0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
10100 28 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  (Byte)) return G
10110 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  etByte(stmt, ind
10120 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
10130 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
10140 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47  Int16)) return G
10150 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  etInt16(stmt, in
10160 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
10170 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
10180 28 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  (UInt16)) return
10190 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c   GetUInt16(stmt,
101a0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
101b0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
101c0 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75  eof(Int32)) retu
101d0 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74  rn GetInt32(stmt
101e0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
101f0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
10200 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65  peof(UInt32)) re
10210 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73  turn GetUInt32(s
10220 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
10230 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
10240 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29   typeof(UInt64))
10250 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36   return GetUInt6
10260 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
10270 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
10280 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
10290 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
102a0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
102b0 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
102c0 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
102d0 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
102e0 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
102f0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
10300 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10310 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
10320 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
10330 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10340 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
10350 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
10360 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
10370 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
10380 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10390 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
103a0 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69  3_table_cursor_i
103b0 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
103c0 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f  ite_stmt, db, ro
103d0 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d  otPage);..#else.
103e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
103f0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
10400 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10410 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
10420 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72  etRowIdForCursor
10430 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10440 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f   stmt, int curso
10450 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
10460 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10470 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69  .      long rowi
10480 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  d;..      SQLite
10490 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
104a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
104b0 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f  ds.sqlite3_curso
104c0 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  r_rowid_interop(
104d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
104e0 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72  t, cursor, out r
104f0 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66  owid);..      if
10500 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
10510 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75  rorCode.Ok) retu
10520 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20  rn rowid;....   
10530 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65     return 0;..#e
10540 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
10550 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n 0;..#endif..  
10560 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10570 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10580 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e  d GetIndexColumn
10590 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72  ExtendedInfo(str
105a0 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73 74  ing database, st
105b0 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69  ring index, stri
105c0 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69  ng column, out i
105d0 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  nt sortMode, out
105e0 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75   int onError, ou
105f0 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69  t string collati
10600 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20  onSequence)..   
10610 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
10620 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10630 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20  IntPtr coll;..  
10640 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b      int colllen;
10650 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
10660 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20  rorCode rc;.... 
10670 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
10680 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10690 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
106a0 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
106b0 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
106c0 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69  abase), ToUTF8(i
106d0 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f  ndex), ToUTF8(co
106e0 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d  lumn), out sortM
106f0 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72  ode, out onError
10700 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20  , out coll, out 
10710 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  colllen);..     
10720 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
10730 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
10740 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
10750 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c  xception(rc, nul
10760 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c  l);....      col
10770 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
10780 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
10790 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23  ll, colllen);..#
107a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74  else..      sort
107b0 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  Mode = 0;..     
107c0 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20   onError = 2;.. 
107d0 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
107e0 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59  quence = "BINARY
107f0 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  ";..#endif..    
10800 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10810 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
10820 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43  eErrorCode FileC
10830 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44  ontrol(string zD
10840 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49  bName, int op, I
10850 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20  ntPtr pArg)..   
10860 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
10870 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10880 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c  hods.sqlite3_fil
10890 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20  e_control(_sql, 
108a0 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  (zDbName != null
108b0 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61  ) ? ToUTF8(zDbNa
108c0 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20  me) : null, op, 
108d0 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  pArg);..    }.. 
108e0 20 7d 0d 0a 7d 0d 0a                              }..}..