System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 32fa481ab1bfde280ba4ff71124b3b55338d366d:


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 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  ),..        Unsa
9dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9de0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
9df0: 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ytes(stmt._sqlit
9e00: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  e_stmt, index));
9e10: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
9e20: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9e30: 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
9e40: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
9e50: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9e60: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
9e70: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
9e80: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9e90: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
9ea0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
9eb0: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
9ec0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9ed0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
9ee0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
9ef0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
9f00: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
9f10: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
9f20: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
9f30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9f40: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9f50: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
9f60: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
9f70: 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
9f80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9f90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
9fa0: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
9fb0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
9fc0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
9fd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9fe0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
9ff0: 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
a000: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
a010: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
a020: 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
a030: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
a040: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
a050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
a060: 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
a070: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a080: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
a090: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
a0a0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
a0b0: 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
a0c0: 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
a0d0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
a0e0: 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
a0f0: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
a100: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
a110: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
a120: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
a130: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
a140: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
a150: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
a160: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
a170: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
a180: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
a190: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
a1a0: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
a1b0: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
a1c0: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
a1d0: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
a1e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
a1f0: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
a200: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a210: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
a220: 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71  mn_blob(stmt._sq
a230: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a240: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
a250: 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
a260: 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
a270: 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
a280: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
a290: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
a2a0: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
a2b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a2c0: 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
a2d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a2e0: 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
a2f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a300: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a310: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
a320: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a330: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
a340: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
a350: 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
a360: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
a370: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
a380: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
a390: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
a3a0: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
a3b0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
a3c0: 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
a3d0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
a3e0: 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
a3f0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
a400: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
a410: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
a420: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
a430: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
a440: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
a450: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
a460: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
a470: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
a480: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
a490: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
a4a0: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
a4b0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
a4c0: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
a4d0: 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
a4e0: 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
a4f0: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
a500: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
a510: 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
a520: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
a530: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
a540: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
a550: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
a560: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
a570: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
a580: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
a590: 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
a5a0: 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
a5b0: 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
a5c0: 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
a5d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a5e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
a5f0: 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
a600: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
a610: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a620: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
a630: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a640: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
a650: 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
a660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a670: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a680: 64 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  d CreateFunction
a690: 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74  (string strFunct
a6a0: 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20  ion, int nArgs, 
a6b0: 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  bool needCollSeq
a6c0: 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
a6d0: 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c   func, SQLiteCal
a6e0: 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20  lback funcstep, 
a6f0: 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
a700: 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a  ack funcfinal)..
a710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
a720: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
a730: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
a740: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
a750: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a760: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a770: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
a780: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
a790: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
a7a0: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
a7b0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
a7c0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
a7d0: 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
a7e0: 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
a7f0: 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  0);..      if (n
a800: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
a810: 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
a820: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a830: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
a840: 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
a850: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
a860: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
a870: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
a880: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
a890: 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
a8a0: 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
a8b0: 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65  e) ? 1 : 0);..#e
a8c0: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
a8d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a8e0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
a8f0: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
a900: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
a910: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
a920: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
a930: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
a940: 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20  cfinal);..      
a950: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
a960: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
a970: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a980: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
a990: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
a9a0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
a9b0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
a9c0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
a9d0: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
a9e0: 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64  uncfinal);..#end
a9f0: 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
aa00: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
aa10: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
aa20: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
aa30: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
aa40: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
aa50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
aa60: 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
aa70: 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
aa80: 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
aa90: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
aaa0: 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
aab0: 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20  tion func16)..  
aac0: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
aad0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
aae0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
aaf0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
ab00: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
ab10: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
ab20: 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74  ation), 2, IntPt
ab30: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b  r.Zero, func16);
ab40: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
ab50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ab60: 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
ab70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ab80: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
ab90: 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
aba0: 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
abb0: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
abc0: 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20  , func);..      
abd0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
abe0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
abf0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ac00: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
ac10: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
ac20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ac30: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
ac40: 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
ac50: 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
ac60: 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
ac70: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
ac80: 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e  string s1, strin
ac90: 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  g s2)..    {..#i
aca0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
acb0: 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
acc0: 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
acd0: 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
ace0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
acf0: 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
ad00: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
ad10: 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
ad20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
ad30: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
ad40: 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
ad50: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
ad60: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
ad70: 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
ad80: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
ad90: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
ada0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
adb0: 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
adc0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
add0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
ade0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
adf0: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
ae00: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
ae10: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
ae20: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
ae30: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
ae40: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
ae50: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
ae60: 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
ae70: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
ae80: 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
ae90: 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
aea0: 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29  ter.GetBytes(s1)
aeb0: 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
aec0: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
aed0: 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (s2);....      r
aee0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
aef0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
af00: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
af10: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
af20: 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
af30: 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
af40: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
af50: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
af60: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
af70: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
af80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
af90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
afa0: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
afb0: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
afc0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
afd0: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
afe0: 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
aff0: 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
b000: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
b010: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
b020: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
b030: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
b040: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
b050: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
b060: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
b070: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
b080: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
b090: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
b0a0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
b0b0: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
b0c0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
b0d0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
b0e0: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
b0f0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
b100: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
b110: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
b120: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
b130: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
b140: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
b150: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
b160: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
b170: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
b180: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
b190: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
b1a0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
b1b0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
b1c0: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
b1d0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
b1e0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
b1f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
b200: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
b210: 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
b220: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
b230: 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
b240: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b250: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b260: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
b270: 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
b280: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
b290: 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
b2a0: 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
b2b0: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
b2c0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
b2d0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
b2e0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b2f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b300: 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e  erride Collation
b310: 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c  Sequence GetColl
b320: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51  ationSequence(SQ
b330: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
b340: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
b350: 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  t)..    {..#if !
b360: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
b370: 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e  .      Collation
b380: 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e  Sequence seq = n
b390: 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ew CollationSequ
b3a0: 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69  ence();..      i
b3b0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  nt len;..      i
b3c0: 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  nt type;..      
b3d0: 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20  int enc;..      
b3e0: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
b3f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b400: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
b410: 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63  ollseq_interop(c
b420: 6f 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65  ontext, out type
b430: 2c 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c  , out enc, out l
b440: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  en);....      if
b450: 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71   (p != null) seq
b460: 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74  .Name = UTF8ToSt
b470: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
b480: 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20       seq.Type = 
b490: 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e  (CollationTypeEn
b4a0: 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  um)type;..      
b4b0: 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63  seq._func = func
b4c0: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63  ;..      seq.Enc
b4d0: 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69  oding = (Collati
b4e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65  onEncodingEnum)e
b4f0: 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  nc;....      ret
b500: 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d  urn seq;..#else.
b510: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
b520: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
b530: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
b540: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
b550: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b560: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
b570: 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50  mValueBytes(IntP
b580: 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f  tr p, int nDataO
b590: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
b5a0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
b5b0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
b5c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
b5d0: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
b5e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b5f0: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
b600: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
b610: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
b620: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
b630: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
b640: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
b650: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
b660: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
b670: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
b680: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
b690: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
b6a0: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
b6b0: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
b6c0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
b6d0: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
b6e0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
b6f0: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
b700: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
b710: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
b720: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
b730: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
b740: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
b750: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
b760: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b770: 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29  e3_value_blob(p)
b780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
b790: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
b7a0: 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
b7b0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
b7c0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
b7d0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
b7e0: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
b7f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b800: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
b810: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b820: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
b830: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b840: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b850: 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56  double GetParamV
b860: 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74  alueDouble(IntPt
b870: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
b880: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
b890: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
b8a0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
b8b0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
b8c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b8d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
b8e0: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b  lue_double(ptr);
b8f0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
b900: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b910: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b920: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
b930: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
b940: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
b950: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
b960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b970: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
b980: 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  t GetParamValueI
b990: 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29  nt32(IntPtr ptr)
b9a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
b9b0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
b9c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b9d0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29  3_value_int(ptr)
b9e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b9f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ba00: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
ba10: 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72  alueInt64(IntPtr
ba20: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
ba30: 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b      Int64 value;
ba40: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
ba50: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
ba60: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
ba70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ba80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
ba90: 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
baa0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
bab0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bac0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
bad0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  t64_interop(ptr,
bae0: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
baf0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
bb00: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
bb10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bb20: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
bb30: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65   GetParamValueTe
bb40: 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  xt(IntPtr ptr)..
bb50: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
bb60: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
bb70: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
bb80: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
bb90: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
bba0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bbb0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
bbc0: 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c  terop(ptr, out l
bbd0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
bbe0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
bbf0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
bc00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bc10: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
bc20: 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20  ext(ptr),..     
bc30: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
bc40: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
bc50: 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29  alue_bytes(ptr))
bc60: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
bc70: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bc80: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
bc90: 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
bca0: 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
bcb0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
bcc0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
bcd0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bce0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
bcf0: 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
bd00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
bd10: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
bd20: 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f  rnBlob(IntPtr co
bd30: 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61  ntext, byte[] va
bd40: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
bd50: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
bd60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
bd70: 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65  esult_blob(conte
bd80: 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65  xt, value, value
bd90: 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72  .Length, (IntPtr
bda0: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
bdb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bdc0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
bdd0: 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
bde0: 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
bdf0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
be00: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
be10: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
be20: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
be30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
be40: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
be50: 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
be60: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
be70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
be80: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
be90: 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  t_double_interop
bea0: 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  (context, ref va
beb0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
bec0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
bed0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
bee0: 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49  id ReturnError(I
bef0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
bf00: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
bf10: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
bf20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bf30: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
bf40: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ror(context, ToU
bf50: 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75  TF8(value), valu
bf60: 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  e.Length);..    
bf70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
bf80: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
bf90: 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50  ReturnInt32(IntP
bfa0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20  tr context, int 
bfb0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
bfc0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
bfd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bfe0: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
bff0: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ext, value);..  
c000: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c010: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c020: 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e  d ReturnInt64(In
c030: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f  tPtr context, lo
c040: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
c050: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
c060: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
c070: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
c080: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c090: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
c0a0: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
c0b0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c0c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c0d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
c0e0: 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  lt_int64_interop
c0f0: 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  (context, ref va
c100: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
c110: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
c120: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
c130: 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e  id ReturnNull(In
c140: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
c150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
c160: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c170: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e  sqlite3_result_n
c180: 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  ull(context);.. 
c190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
c1a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
c1b0: 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e  id ReturnText(In
c1c0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
c1d0: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
c1e0: 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d   {..      byte[]
c1f0: 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
c200: 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  e);..      Unsaf
c210: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c220: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
c230: 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54  xt(context, ToUT
c240: 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e  F8(value), b.Len
c250: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
c260: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
c270: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c280: 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41  verride IntPtr A
c290: 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28  ggregateContext(
c2a0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
c2b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
c2c0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c2d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c2e0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65  _aggregate_conte
c2f0: 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d  xt(context, 1);.
c300: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
c310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
c320: 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20   /// Enables or 
c330: 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69  disabled extensi
c340: 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51  on loading by SQ
c350: 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Lite...    /// <
c360: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
c370: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
c380: 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f  bOnOff">..    //
c390: 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  / True to enable
c3a0: 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65   loading of exte
c3b0: 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f  nsions, false to
c3c0: 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f   disable...    /
c3d0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c3e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c3f0: 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45  de void SetLoadE
c400: 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f  xtension(bool bO
c410: 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
c420: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c430: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c440: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c450: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
c460: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
c470: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
c480: 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30  (bOnOff ? -1 : 0
c490: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
c4a0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c4b0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c4c0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c4d0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c4e0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
c4f0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
c500: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c  mary>..    /// L
c510: 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20 65 78  oads a SQLite ex
c520: 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20  tension library 
c530: 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66  from the named f
c540: 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ile...    /// </
c550: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
c560: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
c570: 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  ileName">..    /
c580: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
c590: 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20  he dynamic link 
c5a0: 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e  library file con
c5b0: 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65  taining the exte
c5c0: 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  nsion...    /// 
c5d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
c5e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
c5f0: 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  rocName">..    /
c600: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
c610: 68 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63  he exported func
c620: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69  tion used to ini
c630: 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65  tialize the exte
c640: 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  nsion...    /// 
c650: 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66  If null, the def
c660: 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78  ault "sqlite3_ex
c670: 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69  tension_init" wi
c680: 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  ll be used...   
c690: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
c6a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c6b0: 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78  ride void LoadEx
c6c0: 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66  tension(string f
c6d0: 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20  ileName, string 
c6e0: 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  procName)..    {
c6f0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69  ..        if (fi
c700: 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  leName == null).
c710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
c720: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
c730: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69  ullException("fi
c740: 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  leName");....   
c750: 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72       IntPtr pErr
c760: 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
c770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
c780: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c790: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
c7a0: 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55  utf8FileName = U
c7b0: 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  TF8Encoding.UTF8
c7c0: 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61  .GetBytes(fileNa
c7d0: 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20  me + '\0');..   
c7e0: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
c7f0: 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e  utf8ProcName = n
c800: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
c810: 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65      if (procName
c820: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
c830: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 50             utf8P
c840: 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  rocName = UTF8En
c850: 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
c860: 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20  ytes(procName + 
c870: 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  '\0');....      
c880: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c890: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c8a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c8b0: 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
c8c0: 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
c8d0: 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66         _sql, utf
c8e0: 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50  8FileName, utf8P
c8f0: 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72  rocName, ref pEr
c900: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
c910: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
c920: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
c930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c940: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
c950: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c960: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72  UTF8ToString(pEr
c970: 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20  ror, -1));..    
c980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
c990: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
c9a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
c9b0: 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74  f (pError != Int
c9c0: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
c9d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c9e0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
c9f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ca00: 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f  lite3_free(pErro
ca10: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
ca20: 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e       pError = In
ca30: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
ca40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ca50: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
ca60: 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
ca70: 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
ca80: 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
ca90: 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c   returned by SQL
caa0: 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ite..    interna
cab0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
cac0: 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c  SetExtendedResul
cad0: 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f  tCodes(bool bOnO
cae0: 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
caf0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
cb00: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
cb10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cb20: 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
cb30: 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20  t_codes(..      
cb40: 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
cb50: 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d  f ? -1 : 0));...
cb60: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
cb70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
cb80: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
cb90: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
cba0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
cbb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
cbc0: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
cbd0: 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  SQLite error cod
cbe0: 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
cbf0: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
cc00: 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43  rrorCode ResultC
cc10: 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
cc20: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
cc30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
cc40: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f  qlite3_errcode(_
cc50: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  sql);..    }..  
cc60: 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c    /// Gets the l
cc70: 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e  ast SQLite exten
cc80: 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ded error code..
cc90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cca0: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
ccb0: 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65  rCode ExtendedRe
ccc0: 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
ccd0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
cce0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ccf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
cd00: 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71  nded_errcode(_sq
cd10: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
cd20: 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20    /// Add a log 
cd30: 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20  message via the 
cd40: 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c  SQLite sqlite3_l
cd50: 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  og interface... 
cd60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cd70: 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73  ride void LogMes
cd80: 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
cd90: 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73  Code iErrCode, s
cda0: 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
cdb0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
cdc0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cdd0: 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
cde0: 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
cdf0: 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
ce00: 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
ce10: 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65  _CODEC..    inte
ce20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
ce30: 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
ce40: 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
ce50: 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
ce60: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ce70: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
ce80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ce90: 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73  e3_key(_sql, pas
cea0: 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73  swordBytes, pass
ceb0: 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
cec0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
ced0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
cee0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
cef0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
cf00: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
cf10: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
cf20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cf30: 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65  ride void Change
cf40: 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20  Password(byte[] 
cf50: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
cf60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
cf70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
cf80: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
cf90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cfa0: 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50  rekey(_sql, newP
cfb0: 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e  asswordBytes, (n
cfc0: 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20  ewPasswordBytes 
cfd0: 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e  == null) ? 0 : n
cfe0: 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e  ewPasswordBytes.
cff0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
d000: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d010: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d020: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d030: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d040: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
d050: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
d060: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d070: 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74  de void SetUpdat
d080: 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61  eHook(SQLiteUpda
d090: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  teCallback func)
d0a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
d0b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d0c0: 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74  ds.sqlite3_updat
d0d0: 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  e_hook(_sql, fun
d0e0: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
d0f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d100: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d110: 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48   void SetCommitH
d120: 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74  ook(SQLiteCommit
d130: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
d140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
d150: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d160: 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f  .sqlite3_commit_
d170: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
d180: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
d190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d1a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d1b0: 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c  oid SetTraceCall
d1c0: 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65  back(SQLiteTrace
d1d0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
d1e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
d1f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d200: 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f  .sqlite3_trace(_
d210: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
d220: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
d230: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d240: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
d250: 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51  tRollbackHook(SQ
d260: 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  LiteRollbackCall
d270: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
d280: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
d290: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d2a0: 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f  ite3_rollback_ho
d2b0: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
d2c0: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
d2d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
d2e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
d2f0: 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74  / Allows the set
d300: 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e  ting of a loggin
d310: 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b  g callback invok
d320: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
d330: 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67  n a..    /// log
d340: 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20   event occurs.  
d350: 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63  Only one callbac
d360: 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49  k may be set.  I
d370: 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64  f NULL is passed
d380: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c  ,..    /// the l
d390: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
d3a0: 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e  is unregistered.
d3b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d3c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
d3d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22  aram name="func"
d3e0: 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75  >The callback fu
d3f0: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
d400: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
d410: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
d420: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
d430: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
d440: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d450: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
d460: 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63  de SetLogCallbac
d470: 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62  k(SQLiteLogCallb
d480: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
d490: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d4a0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
d4b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d4c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  ds.sqlite3_confi
d4d0: 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20  g_log(..        
d4e0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
d4f0: 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
d500: 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c  ONFIG_LOG, func,
d510: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
d520: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
d530: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
d540: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
d5b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d5c0: 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53   Creates a new S
d5d0: 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a  QLite backup obj
d5e0: 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ect based on the
d5f0: 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e   provided destin
d600: 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
d610: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d620: 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  on.  The source 
d630: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
d640: 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a  ion is the one..
d650: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
d660: 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  ed with this obj
d670: 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ect.  The source
d680: 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e   and destination
d690: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
d6a0: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  // connections c
d6b0: 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  annot be the sam
d6c0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
d6d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
d6e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
d6f0: 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tCnn">The destin
d700: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
d710: 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
d720: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
d730: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d  am name="destNam
d740: 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  e">The destinati
d750: 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  on database name
d760: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
d770: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
d780: 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20  sourceName">The 
d790: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
d7a0: 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
d7b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
d7c0: 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
d7d0: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
d7e0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
d7f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d800: 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49  e SQLiteBackup I
d810: 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28  nitializeBackup(
d820: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d830: 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43  Connection destC
d840: 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nn,..        str
d850: 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20  ing destName,.. 
d860: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f         string so
d870: 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  urceName..      
d880: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
d890: 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20      if (destCnn 
d8a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
d8b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d8c0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
d8d0: 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29  ption("destCnn")
d8e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d8f0: 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (destName == nul
d900: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d910: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
d920: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
d930: 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "destName");....
d940: 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72          if (sour
d950: 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ceName == null).
d960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
d970: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
d980: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f  ullException("so
d990: 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  urceName");.... 
d9a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64         SQLite3 d
d9b0: 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73  estSqlite3 = des
d9c0: 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c  tCnn._sql as SQL
d9d0: 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite3;....       
d9e0: 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33   if (destSqlite3
d9f0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
da00: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
da10: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
da20: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
da30: 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
da40: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
da50: 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a   no wrapper.",..
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
da80: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
da90: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65  nectionHandle de
daa0: 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53  stHandle = destS
dab0: 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a  qlite3._sql;....
dac0: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
dad0: 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  Handle == null).
dae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
daf0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
db00: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
db10: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
db20: 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
db30: 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
db40: 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20  d handle.",..   
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
db60: 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
db70: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
db80: 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63  tionHandle sourc
db90: 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d  eHandle = _sql;.
dba0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
dbb0: 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e  ourceHandle == n
dbc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
dbd0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
dbe0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
dbf0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
dc00: 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20          "Source 
dc10: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
dc20: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
dc30: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
dc40: 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65  byte[] zDestName
dc50: 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61   = ToUTF8(destNa
dc60: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79  me);..        by
dc70: 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65  te[] zSourceName
dc80: 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65   = ToUTF8(source
dc90: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
dca0: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
dcb0: 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c  ndle backupHandl
dcc0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
dcd0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
dce0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
dcf0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
dd00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
dd10: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
dd20: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
dd30: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
dd40: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
dd60: 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66  r backup = Unsaf
dd70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dd80: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e  qlite3_backup_in
dd90: 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
dda0: 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c       destHandle,
ddb0: 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72   zDestName, sour
ddc0: 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63  ceHandle, zSourc
ddd0: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
dde0: 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
ddf0: 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p == IntPtr.Zero
de00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
de10: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
de20: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 52 65 73  iteException(Res
de30: 75 6c 74 43 6f 64 65 28 29 2c 20 47 65 74 4c 61  ultCode(), GetLa
de40: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
de50: 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
de60: 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  pHandle = new SQ
de70: 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
de80: 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
de90: 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  kup);..        }
dea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
deb0: 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63  rn new SQLiteBac
dec0: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kup(..          
ded0: 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61    this, backupHa
dee0: 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65  ndle, destHandle
def0: 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75  , zDestName, sou
df00: 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20  rceHandle,..    
df10: 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e          zSourceN
df20: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
df30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
df40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65  >..    /// Copie
df50: 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20  s up to N pages 
df60: 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20  from the source 
df70: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
df80: 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
df90: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73   /// database as
dfa0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
dfb0: 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
dfc0: 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
dfd0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dfe0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
dff0: 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
e000: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
e010: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
e020: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e030: 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20  ame="nPage">..  
e040: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
e050: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70   of pages to cop
e060: 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63  y, negative to c
e070: 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e  opy all remainin
e080: 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f  g pages...    //
e090: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
e0a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e0b0: 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f  "retry">..    //
e0c0: 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66  / Set to true if
e0d0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e   the operation n
e0e0: 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69  eeds to be retri
e0f0: 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61  ed due to databa
e100: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b  se..    /// lock
e110: 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65  ing issues; othe
e120: 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61  rwise, set to fa
e130: 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lse...    /// </
e140: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
e150: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
e160: 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65  // True if there
e170: 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20   are more pages 
e180: 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61  to be copied, fa
e190: 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  lse otherwise...
e1a0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
e1b0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
e1c0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
e1d0: 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  tepBackup(..    
e1e0: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
e1f0: 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20   backup,..      
e200: 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20    int nPage,..  
e210: 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72        out bool r
e220: 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  etry..        ).
e230: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e240: 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  retry = false;..
e250: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
e260: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
e270: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e280: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
e290: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
e2a0: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
e2b0: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
e2c0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
e2d0: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
e2e0: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
e2f0: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
e300: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e310: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
e320: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
e330: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
e340: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
e350: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
e360: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
e370: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
e380: 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
e390: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
e3a0: 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
e3b0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e3d0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
e3e0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
e3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e400: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
e410: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
e420: 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
e430: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
e440: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
e450: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e460: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
e470: 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50  kup_step(handleP
e480: 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20  tr, nPage);..   
e490: 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65       backup._ste
e4a0: 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20  pResult = n; /* 
e4b0: 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75  NOTE: Save for u
e4c0: 73 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b  se by FinishBack
e4d0: 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  up. */....      
e4e0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
e4f0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
e500: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e510: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
e520: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
e530: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
e540: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
e550: 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
e560: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e570: 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
e580: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
e590: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
e5a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e5b0: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
e5c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
e5d0: 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  cked)..        {
e5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
e5f0: 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  try = true;..   
e600: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e610: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
e620: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
e630: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
e640: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20  rorCode.Done).. 
e650: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e660: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
e670: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
e680: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
e690: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e6a0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
e6b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e6c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e6d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
e6e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
e6f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e700: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
e710: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
e720: 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
e730: 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73  opied from the s
e740: 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64  ource..    /// d
e750: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
e760: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
e770: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
e780: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
e790: 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75  d..    /// backu
e7a0: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
e7b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e7c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e7d0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
e7e0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
e7f0: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
e800: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
e810: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
e820: 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
e830: 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72  to be copied.</r
e840: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
e850: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
e860: 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b  nt RemainingBack
e870: 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
e880: 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
e890: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
e8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
e8b0: 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
e8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e8d0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
e8e0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
e8f0: 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
e900: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
e910: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
e920: 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
e930: 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
e940: 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
e950: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e960: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
e970: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
e980: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
e990: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
e9a0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
e9b0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
e9c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
e9d0: 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
e9e0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
e9f0: 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
ea00: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
ea10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
ea20: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
ea30: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
ea40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ea50: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
ea60: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
ea70: 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
ea80: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ");....        r
ea90: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
eaa0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eab0: 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69  3_backup_remaini
eac0: 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  ng(handlePtr);..
ead0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
eae0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
eaf0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
eb00: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
eb10: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75  pages in the sou
eb20: 72 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73  rce database ass
eb30: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
eb40: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
eb50: 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
eb60: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
eb70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
eb80: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
eb90: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
eba0: 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
ebb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
ebc0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74  / <returns>The t
ebd0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
ebe0: 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
ebf0: 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65  ce database.</re
ec00: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
ec10: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
ec20: 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75  t PageCountBacku
ec30: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
ec40: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
ec50: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
ec60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
ec70: 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
ec90: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
eca0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
ecb0: 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
ecc0: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
ecd0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
ece0: 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
ecf0: 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
ed00: 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
ed10: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ed20: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
ed30: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
ed40: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
ed50: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
ed60: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
ed70: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
ed80: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
ed90: 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
eda0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
edb0: 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
edc0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
ede0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
edf0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
ee00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ee10: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
ee20: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
ee30: 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
ee40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
ee50: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
ee60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ee70: 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e  _backup_pagecoun
ee80: 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  t(handlePtr);.. 
ee90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
eea0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
eeb0: 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20  // Destroys the 
eec0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72  backup object, r
eed0: 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20  olling back any 
eee0: 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20  backup that may 
eef0: 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70  be in..    /// p
ef00: 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rogess...    ///
ef10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ef20: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
ef30: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
ef40: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64  ckup object to d
ef50: 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d  estroy.</param>.
ef60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ef70: 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69  erride void Fini
ef80: 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  shBackup(..     
ef90: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
efa0: 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
efb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
efc0: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
efd0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
efe0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
eff0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
f000: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
f010: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
f020: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
f030: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
f040: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
f050: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
f060: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
f070: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f080: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
f090: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
f0b0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
f0c0: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
f0d0: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
f0e0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
f0f0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
f100: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
f110: 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
f120: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
f130: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
f140: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
f150: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
f160: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
f170: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
f180: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
f190: 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
f1a0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f1b0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f1c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f1d0: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
f1e0: 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
f1f0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53          handle.S
f200: 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69  etHandleAsInvali
f210: 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e  d();....#if COUN
f220: 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20  T_HANDLE..      
f230: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
f240: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 68  eErrorCode.Ok) h
f250: 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65  andle.WasRelease
f260: 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dOk();..#endif..
f270: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
f280: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f290: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d  ode.Ok) && (n !=
f2a0: 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
f2b0: 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
f2c0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
f2d0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f2e0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f2f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f360: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f370: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
f380: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
f390: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
f3a0: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
f3b0: 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
f3c0: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
f3d0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
f3e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f3f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
f400: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
f410: 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
f420: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
f430: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
f440: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
f450: 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
f460: 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
f470: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
f480: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
f490: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f4a0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49  verride bool IsI
f4b0: 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20  nitialized()..  
f4c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
f4d0: 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74  urn StaticIsInit
f4e0: 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20  ialized();..    
f4f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
f500: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f510: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
f520: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
f530: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69  brary has been i
f540: 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
f550: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
f560: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
f570: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f580: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
f590: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62  ns>..    /// A b
f5a0: 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e  oolean indicatin
f5b0: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
f5c0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
f5d0: 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
f5e0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69  n..    /// initi
f5f0: 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  alized for the c
f600: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
f610: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
f620: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
f630: 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74  l static bool St
f640: 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
f650: 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
f660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
f670: 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76 65  // BUGFIX: Preve
f680: 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f 74  nt races with ot
f690: 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72 20  her threads for 
f6a0: 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63  this entire bloc
f6b0: 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20  k, due..        
f6c0: 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74 68  //         to th
f6d0: 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65  e try/finally se
f6e0: 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69  mantics.  See ti
f6f0: 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37 37  cket [72905c9a77
f700: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ]...        //..
f710: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
f720: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
f730: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f740: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
f750: 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68  // NOTE: Save th
f760: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c  e state of the l
f770: 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64  ogging class and
f780: 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74   then restore it
f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f7a0: 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65 20         after we 
f7b0: 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69  are done to avoi
f7c0: 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61  d logging too ma
f7d0: 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e  ny false errors.
f7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
f800: 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20  ol savedEnabled 
f810: 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62  = SQLiteLog.Enab
f820: 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
f830: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62    SQLiteLog.Enab
f840: 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  led = false;....
f850: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
f860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f880: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
f890: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
f8a0: 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65  s method [ab]use
f8b0: 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  s the fact that 
f8c0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
f8d0: 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ys..            
f8e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74      //       ret
f8f0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
f900: 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e   for any unknown
f910: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
f920: 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..         
f930: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f940: 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c  *unless* the SQL
f950: 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ite library has 
f960: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
f970: 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  tialized...     
f980: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
f990: 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73 65      In that case
f9a0: 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20   it will always 
f9b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
f9c0: 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20  SUSE...         
f9d0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
f9e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
f9f0: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
fa00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fa10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
fa20: 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20  ig_none(..      
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
fa40: 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
fa50: 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
fa60: 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  NONE);....      
fa70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
fa80: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
fa90: 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b  rorCode.Misuse);
faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
fab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
fac0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
fad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fae0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
faf0: 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e  nabled = savedEn
fb00: 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
fb10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
fb20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
fb30: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
fb40: 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e    /// Helper fun
fb50: 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76  ction to retriev
fb60: 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61  e a column of da
fb70: 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76  ta from an activ
fb80: 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  e statement...  
fb90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fba0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fbb0: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
fbc0: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
fbd0: 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75 67   step()'d throug
fbe0: 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  h</param>..    /
fbf0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
fc00: 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
fc10: 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
fc20: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
fc30: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
fc40: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
fc50: 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
fc60: 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
fc70: 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
fc80: 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
fc90: 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
fca0: 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
fcb0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
fcc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
fcd0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
fce0: 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
fcf0: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
fd00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fd10: 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
fd20: 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
fd30: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
fd40: 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
fd50: 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
fd60: 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73 74     if (IsNull(st
fd70: 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74 75  mt, index)) retu
fd80: 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
fd90: 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
fda0: 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41  nity aff = typ.A
fdb0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
fdc0: 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  Type t = null;..
fdd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e  ..      if (typ.
fde0: 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f  Type != DbType.O
fdf0: 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d  bject)..      {.
fe00: 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c  .        t = SQL
fe10: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
fe20: 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29  eTypeToType(typ)
fe30: 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d  ;..        aff =
fe40: 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28   TypeToAffinity(
fe50: 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  t);..      }....
fe60: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66        switch (af
fe70: 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  f)..      {..   
fe80: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
fe90: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
fea0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
feb0: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
fec0: 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e  uid && typ.Affin
fed0: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
fee0: 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20  ity.Text)..     
fef0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
ff00: 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73  w Guid(GetText(s
ff10: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d  tmt, index));...
ff20: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
ff30: 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73   = (int)GetBytes
ff40: 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
ff50: 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20   null, 0, 0);.. 
ff60: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
ff70: 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b  b = new byte[n];
ff80: 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42  ..          GetB
ff90: 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
ffa0: 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a  , 0, b, 0, n);..
ffb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
ffc0: 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
ffd0: 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20  pe.Guid && n == 
ffe0: 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  16)..           
fff0: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
10000 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (b);....        
10010 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20    return b;..   
10020 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
10030 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a  finity.DateTime:
10040 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
10050 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73  rn GetDateTime(s
10060 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
10070 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
10080 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
10090 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
100a0 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
100b0 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c   GetDouble(stmt,
100c0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
100d0 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
100e0 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
100f0 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
10100 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d  dex), t, null);.
10110 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
10120 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
10130 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
10140 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
10150 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
10160 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10170 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
10180 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74  peof(SByte)) ret
10190 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d  urn GetSByte(stm
101a0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
101b0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
101c0 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74  ypeof(Byte)) ret
101d0 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74  urn GetByte(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 49 6e 74 31 36 29 29 20 72 65 74  peof(Int16)) ret
10210 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d  urn GetInt16(stm
10220 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
10230 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
10240 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72  ypeof(UInt16)) r
10250 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28  eturn GetUInt16(
10260 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
10270 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
10280 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29  = typeof(Int32))
10290 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32   return GetInt32
102a0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
102b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
102c0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32  == typeof(UInt32
102d0 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
102e0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
102f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
10300 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
10310 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
10320 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  UInt64(stmt, ind
10330 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
10340 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
10350 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74  hangeType(GetInt
10360 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  64(stmt, index),
10370 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
10380 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
10390 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
103a0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
103b0 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ex);..      }.. 
103c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
103d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
103e0 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61  t GetCursorForTa
103f0 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
10400 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62  ent stmt, int db
10410 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d  , int rootPage).
10420 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
10430 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
10440 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
10450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10460 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72  qlite3_table_cur
10470 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  sor_interop(stmt
10480 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64  ._sqlite_stmt, d
10490 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23  b, rootPage);..#
104a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
104b0 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a  rn -1;..#endif..
104c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
104d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
104e0 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43  ong GetRowIdForC
104f0 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74  ursor(SQLiteStat
10500 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
10510 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a  cursor)..    {..
10520 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
10530 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
10540 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20 53   rowid;..      S
10550 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
10560 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
10570 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10580 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
10590 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
105a0 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20  e_stmt, cursor, 
105b0 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20  out rowid);..   
105c0 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
105d0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
105e0 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a   return rowid;..
105f0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
10600 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
10610 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69  return 0;..#endi
10620 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
10630 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10640 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43  e void GetIndexC
10650 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66  olumnExtendedInf
10660 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73  o(string databas
10670 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c  e, string index,
10680 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
10690 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65  out int sortMode
106a0 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f  , out int onErro
106b0 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  r, out string co
106c0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29  llationSequence)
106d0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
106e0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
106f0 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
10700 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  ;..      int col
10710 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c  llen;..      SQL
10720 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b  iteErrorCode rc;
10730 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55  ....      rc = U
10740 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10750 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
10760 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74  _column_info_int
10770 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
10780 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55  8(database), ToU
10790 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54  TF8(index), ToUT
107a0 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
107b0 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e  sortMode, out on
107c0 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c  Error, out coll,
107d0 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a   out colllen);..
107e0 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20        if (rc != 
107f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10800 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
10810 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
10820 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
10830 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
10840 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
10850 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e  ng(coll, colllen
10860 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10870 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a   sortMode = 0;..
10880 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20        onError = 
10890 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  2;..      collat
108a0 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42  ionSequence = "B
108b0 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d  INARY";..#endif.
108c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
108d0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
108e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
108f0 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69  FileControl(stri
10900 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20  ng zDbName, int 
10910 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29  op, IntPtr pArg)
10920 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10930 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10940 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10950 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f  3_file_control(_
10960 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d  sql, (zDbName !=
10970 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28   null) ? ToUTF8(
10980 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c  zDbName) : null,
10990 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20   op, pArg);..   
109a0 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..