System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 998a68149a337d5761de9f91274e185b227479fd:


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 39 30 2e 30  sion = "1.0.90.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 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  d List<SQLiteFun
0b00: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0b10: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0b20: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0b30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0b40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0b50: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0b60: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0b70: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0b80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b90: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0ba0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0bb0: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0bc0: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0bd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0c40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c50: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0c60: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0c70: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0c80: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0c90: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0ca0: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0cb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0ce0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0cf0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0d00: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0d10: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0d20: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0d30: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0d40: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0d50: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0d60: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0d70: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0d80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0d90: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0da0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0db0: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0dc0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0dd0: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0de0: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0df0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0e10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0e20: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0e30: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0e40: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0e50: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0e60: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0e70: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0e80: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ea0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0eb0: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0ec0: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0ed0: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0ee0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0ef0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0f00: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0f10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f20: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0f40: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
0f50: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
0f60: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
0f70: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
0f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0fa0: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
0fb0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
0fc0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
0fd0: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
0fe0: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
0ff0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1000: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
1010: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
1020: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
1030: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
1040: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1060: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1070: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1080: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1090: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
10a0: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
10b0: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
10c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10d0: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
10e0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
10f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1100: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
1110: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
1120: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
1130: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
1140: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1150: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1170: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1180: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1190: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
11a0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
11b0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
11c0: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
11d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
11e0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
11f0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
1200: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
1210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1220: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1230: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1240: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1250: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
1270: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1280: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1290: 65 63 74 5b 5d 20 7b 20 66 6d 74 2c 20 6b 69 6e  ect[] { fmt, kin
12a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
12b0: 20 20 20 20 66 6d 74 53 74 72 69 6e 67 2c 20 64      fmtString, d
12c0: 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6f 77 6e  b, fileName, own
12d0: 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20  Handle }));..   
12e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
12f0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1350: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1360: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1370: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
1380: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  s..    private b
1390: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
13a0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
13b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
13c0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
13d0: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
13e0: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
13f0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1410: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
1420: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
1430: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e  typeof(SQLite3).
1440: 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  Name);..#endif..
1450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14c0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
14d0: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
14e0: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
14f0: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
1500: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1520: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
1530: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1550: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1570: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
1580: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c0: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
15d0: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
15e0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1600: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
1630: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
1640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
1680: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
1690: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
16a0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49  ///////....#if I
16f0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1700: 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20  ABLE..          
1710: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
1720: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
1730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1740: 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b     Close(false);
1750: 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c 20 63   /* Disposing, c
1760: 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d  annot throw. */.
1770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
17a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17b0: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
17c0: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
17d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
17f0: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
1800: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
1810: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
1820: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
1830: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1840: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
1850: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1860: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1870: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18e0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
18f0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
1900: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1910: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1920: 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64  od attempts to d
1930: 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68  ispose of all th
1940: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1950: 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65  iteModule" /> de
1960: 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f  rived..    /// o
1970: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20  bject instances 
1980: 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f 63 69  currently associ
1990: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 61  ated with the na
19a0: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
19b0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
19c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
19d0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
19e0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
19f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a00: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
1a10: 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64  NOTE: If any mod
1a20: 75 6c 65 73 20 77 65 72 65 20 63 72 65 61 74 65  ules were create
1a30: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 69  d, attempt to di
1a40: 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20 20 20  spose of..      
1a50: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 6d 20    //       them 
1a60: 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64 65 20  now.  This code 
1a70: 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 61  is designed to a
1a80: 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20  void throwing.. 
1a90: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1aa0: 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73  exceptions unles
1ab0: 73 20 74 68 65 20 44 69 73 70 6f 73 65 20 6d 65  s the Dispose me
1ac0: 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
1ad0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  le..        //  
1ae0: 20 20 20 20 20 69 74 73 65 6c 66 20 74 68 72 6f       itself thro
1af0: 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e  ws an exception.
1b00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
1b10: 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c        if (_modul
1b20: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
1b30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b40: 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79      foreach (Key
1b50: 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67  ValuePair<string
1b60: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20  , SQLiteModule> 
1b70: 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73  pair in _modules
1b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba0: 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
1bb0: 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c  odule = pair.Val
1bc0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1bd0: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
1be0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
1c20: 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
1c50: 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a  dules.Clear();..
1c60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1c70: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ce0: 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e  ...    // It isn
1cf0: 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  't necessary to 
1d00: 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63  cleanup any func
1d10: 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69  tions we've regi
1d20: 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20  stered.  If the 
1d30: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..    
1d40: 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70  // goes to the p
1d50: 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72  ool and is resur
1d60: 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65  rected later, re
1d70: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
1d80: 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77  tions will overw
1d90: 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rite the..    //
1da0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
1db0: 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ons.  The SQLite
1dc0: 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61  FunctionCookieHa
1dd0: 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  ndle will take c
1de0: 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75  are of freeing u
1df0: 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f  nmanaged..    //
1e00: 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e   resources belon
1e10: 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76  ging to the prev
1e20: 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65  iously-registere
1e30: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  d functions...  
1e40: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1e50: 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62  ide void Close(b
1e60: 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
1e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
1e80: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1e90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea0: 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48    if (!_sql.OwnH
1eb0: 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  andle)..        
1ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ed0: 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d     _sql = null;.
1ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1ef0: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
1f00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f10: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
1f20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1f40: 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74 43  QLiteBase.ResetC
1f50: 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  onnection(_sql, 
1f60: 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29 29  _sql, canThrow))
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f80: 7b 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  {..#if INTEROP_V
1f90: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
1fc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1fe0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
1ff0: 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d  ool.Add(_fileNam
2000: 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65  e, _sql, _poolVe
2010: 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21  rsion);....#if !
2020: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2030: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2040: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2050: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
2060: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
2070: 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c  mat("Close (Pool
2080: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2090: 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66   _sql));..#endif
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b0: 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
20c0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
20d0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
20e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2110: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2120: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
2130: 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46  ("Close (Pool) F
2140: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 20 5f 73  ailure: {0}", _s
2150: 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ql));..         
2160: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
2170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2180: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21a0: 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73          _sql.Dis
21b0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
21c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21d0: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
21e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
21f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
2260: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2270: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  / Attempts to in
2280: 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65 72  terrupt the quer
2290: 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  y currently exec
22a0: 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73  uting on the ass
22b0: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
22c0: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
22d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
22e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2300: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
2310: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
2320: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2330: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2340: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
2350: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2360: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2370: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2380: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
2390: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
23a0: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
23b0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
23c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
23d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
23e0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
23f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
2400: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
2410: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
2420: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
2430: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
2440: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
2450: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
2460: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2470: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2480: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2490: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
24a0: 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ction">..    ///
24b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
24c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f  SQLiteFunction"/
24d0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
24e0: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
24f0: 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  s the..    /// f
2500: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2510: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2520: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2530: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
2540: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
2550: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
2560: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
2570: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
2580: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
2590: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
25a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
25b0: 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  oid BindFunction
25c0: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
25d0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
25e0: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
25f0: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
2600: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
2610: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
2620: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2630: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
2640: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
2650: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
2660: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
2670: 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69  ion(this, functi
2680: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
2690: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a  ction, flags);..
26a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
26b0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
26c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  )..            _
26d0: 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20  functions = new 
26e0: 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74  List<SQLiteFunct
26f0: 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ion>();....     
2700: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64     _functions.Ad
2710: 64 28 66 75 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20  d(function);..  
2720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2730: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
2740: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
2750: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2760: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2770: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
2780: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
27a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
27b0: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
27c0: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
27d0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
27e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
27f0: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
2800: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
2810: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2820: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2830: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2840: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
2850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
2860: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
2870: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2880: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
2890: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
28a0: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
28b0: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
28c0: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
28d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
28e0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
28f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
2900: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
2910: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2920: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2930: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
2940: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2970: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
2980: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
29d0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
2a00: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a20: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
2a30: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
2a40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2a70: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
2a80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2aa0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2ab0: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
2ac0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2ad0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2ae0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
2af0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
2b00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2b10: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
2b20: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
2b30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2b40: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
2b50: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
2b60: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
2b70: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2b80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2b90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2ba0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
2bb0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
2bc0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2bd0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2be0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
2bf0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
2c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2c10: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2c20: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2c30: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2c40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2c50: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
2c60: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
2c70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2c80: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2c90: 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  g InteropVersion
2ca0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2cb0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
2cc0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2cd0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
2ce0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2cf0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2d00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2d10: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 69 6e  e3_libversion_in
2d20: 74 65 72 6f 70 28 29 2c 20 2d 31 29 3b 0d 0a 23  terop(), -1);..#
2d30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d40: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2d50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2d60: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2d70: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
2d80: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f  string InteropSo
2d90: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
2da0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
2db0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
2dc0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2dd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2de0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
2df0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2e00: 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  .sqlite3_sourcei
2e10: 64 5f 69 6e 74 65 72 6f 70 28 29 2c 20 2d 31 29  d_interop(), -1)
2e20: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2e40: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
2e50: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2e60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2e70: 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43  rride bool AutoC
2e80: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
2e90: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2ea0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2eb0: 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73   IsAutocommit(_s
2ec0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
2ed0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2ee0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2ef0: 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73  ide long LastIns
2f00: 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d  ertRowId..    {.
2f10: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2f20: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
2f30: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
2f40: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ORK..        ret
2f50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
2f60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2f70: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2f80: 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20  d(_sql);..#elif 
2f90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
2fa0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72  ..        long r
2fb0: 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  owId = 0;..     
2fc0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
2fd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
2fe0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2ff0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72  _interop(_sql, r
3000: 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20  ef rowId);..    
3010: 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49 64      return rowId
3020: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
3030: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
3040: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
3050: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
3060: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3070: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3080: 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e  verride int Chan
3090: 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ges..    {..    
30a0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
30b0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
30c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72 65  DARD..        re
30d0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
30e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
30f0: 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70  _changes_interop
3100: 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  (_sql);..#else..
3110: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3120: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3130: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
3140: 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69  es(_sql);..#endi
3150: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
3160: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3170: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
3180: 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20  MemoryUsed..    
3190: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
31a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
31c0: 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d  aticMemoryUsed;.
31d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
31e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
31f0: 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74  l static long St
3200: 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a  aticMemoryUsed..
3210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
3220: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
3230: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
3240: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
3250: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3260: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
3270: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
3280: 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65  mory_used();..#e
3290: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
32a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
32b0: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
32c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ;..            U
32d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32e0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
32f0: 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72  y_used_interop(r
3300: 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  ef bytes);..    
3310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
3320: 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ytes;..#else..  
3330: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3340: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
3350: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
3360: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3380: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3390: 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67  e long MemoryHig
33a0: 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20  hwater..    {.. 
33b0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
33c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33d0: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
33e0: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 3b  MemoryHighwater;
33f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3400: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3410: 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53  al static long S
3420: 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68 77  taticMemoryHighw
3430: 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ater..    {..   
3440: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
3450: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
3460: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
3470: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
3480: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3490: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
34a0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
34b0: 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20  ater(0);..#elif 
34c0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
34d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
34e0: 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20  ng bytes = 0;.. 
34f0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
3500: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3510: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69  qlite3_memory_hi
3520: 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28  ghwater_interop(
3530: 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a  0, ref bytes);..
3540: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3550: 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65  rn bytes;..#else
3560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3570: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
3580: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
3590: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
35a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
35b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
35c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
35d0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
35e0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
35f0: 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
3600: 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d  handle is owned.
3610: 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73  .    /// by this
3620: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
3630: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3640: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3650: 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61  rride bool OwnHa
3660: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
3670: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
3680: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3690: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
36a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
36b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
36c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e  LiteException("n
36d0: 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  o connection han
36e0: 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b  dle available");
36f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3700: 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48  return _sql.OwnH
3710: 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  andle;..        
3720: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3730: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3740: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
3750: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
3760: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
3780: 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65  turn StaticSetMe
3790: 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65  moryStatus(value
37a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
37b0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
37c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
37d0: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
37e0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
37f0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
3800: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
3810: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
3820: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3830: 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d  te3_config_int(.
3840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
3850: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
3860: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  .SQLITE_CONFIG_M
3870: 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20  EMSTATUS, value 
3880: 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20  ? 1 : 0);....   
3890: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
38a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
38b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
38c0: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
38d0: 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 68 65   free as much he
38e0: 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ap memory as pos
38f0: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61  sible for the da
3900: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3910: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
3920: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3930: 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64  <returns>A stand
3940: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
3950: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
3960: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
3970: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66  d non-zero for f
3980: 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e  ailure).</return
3990: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
39a0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
39b0: 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
39c0: 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b  eMemory()..    {
39d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
39e0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
39f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3a00: 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ds.sqlite3_db_re
3a10: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71  lease_memory(_sq
3a20: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
3a30: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
3a40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3a50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
3a60: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20  empts to free N 
3a70: 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65  bytes of heap me
3a80: 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61  mory by dealloca
3a90: 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  ting non-essenti
3aa0: 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f  al memory..    /
3ab0: 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68  // allocations h
3ac0: 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61 62  eld by the datab
3ad0: 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d  ase library. Mem
3ae0: 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63 68  ory used to cach
3af0: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  e database pages
3b00: 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70  ..    /// to imp
3b10: 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  rove performance
3b20: 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f   is an example o
3b30: 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  f non-essential 
3b40: 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73  memory.  This is
3b50: 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f   a no-op..    //
3b60: 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f  / returning zero
3b70: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
3b80: 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  ore library was 
3b90: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
3ba0: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  h the compile-ti
3bb0: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69  me..    /// opti
3bc0: 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  on SQLITE_ENABLE
3bd0: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
3be0: 4e 54 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  NT...    /// </s
3bf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3c00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42   <param name="nB
3c10: 79 74 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ytes">..    /// 
3c20: 54 68 65 20 72 65 71 75 65 73 74 65 64 20 6e 75  The requested nu
3c30: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
3c40: 20 66 72 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   free...    /// 
3c50: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3c60: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
3c70: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
3c80: 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c  of bytes actuall
3c90: 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20 76  y freed.  This v
3ca0: 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f  alue may be zero
3cb0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3cc0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
3cd0: 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53  nal static int S
3ce0: 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f  taticReleaseMemo
3cf0: 72 79 28 69 6e 74 20 6e 42 79 74 65 73 29 0d 0a  ry(int nBytes)..
3d00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3d10: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
3d20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3d30: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
3d40: 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 7d  (nBytes);..    }
3d50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3d60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
3d70: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
3d80: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
3d90: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
3da0: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
3db0: 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  rent..    /// co
3dc0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
3dd0: 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20  ons.  We depend 
3de0: 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69  on auto initiali
3df0: 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65  zation to recove
3e00: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
3e10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3e20: 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
3e30: 20 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   a standard SQLi
3e40: 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c  te result code.<
3e50: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
3e60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3e70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3e80: 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
3e90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3ea0: 72 6e 20 53 74 61 74 69 63 53 68 75 74 64 6f 77  rn StaticShutdow
3eb0: 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d  n(false);..    }
3ec0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3ed0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
3ee0: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
3ef0: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
3f00: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
3f10: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
3f20: 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  rent..    /// co
3f30: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
3f40: 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20  ons.  We depend 
3f50: 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69  on auto initiali
3f60: 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65  zation to recove
3f70: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
3f80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3f90: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 72  <param name="dir
3fa0: 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20 20 20  ectories">..    
3fb0: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  /// Non-zero to 
3fc0: 72 65 73 65 74 20 74 68 65 20 64 61 74 61 62 61  reset the databa
3fd0: 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
3fe0: 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f 20   directories to 
3ff0: 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f 20 64  their..    /// d
4000: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77  efault values, w
4010: 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e  hich should be n
4020: 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20 20 54  ull for both.  T
4030: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 68 61  his parameter ha
4040: 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65 66  s no..    /// ef
4050: 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64  fect on non-Wind
4060: 6f 77 73 20 6f 70 65 72 61 74 69 6e 67 20 73 79  ows operating sy
4070: 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  stems...    /// 
4080: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4090: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
40a0: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51  ns a standard SQ
40b0: 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65  Lite result code
40c0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
40d0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
40e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
40f0: 20 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28   StaticShutdown(
4100: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64  ..        bool d
4110: 69 72 65 63 74 6f 72 69 65 73 0d 0a 20 20 20 20  irectories..    
4120: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
4130: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4140: 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69 74  rCode rc = SQLit
4150: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
4160: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69  ..        if (di
4170: 72 65 63 74 6f 72 69 65 73 29 0d 0a 20 20 20 20  rectories)..    
4180: 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f      {..#if WINDO
4190: 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  WS..            
41a0: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
41b0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
41d0: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
41e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
41f0: 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
4200: 6f 72 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  ory(1, null);...
4210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4220: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
4230: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
4240: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
4250: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4260: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
4270: 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
4280: 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73  (2, null);..#els
4290: 65 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  e..#if !NET_COMP
42a0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
42b0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
42c0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
42d0: 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
42e0: 20 20 20 20 20 20 20 20 20 20 22 53 68 75 74 64            "Shutd
42f0: 6f 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65  own: Cannot rese
4300: 74 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f 6e  t directories on
4310: 20 74 68 69 73 20 6f 70 65 72 61 74 69 6e 67 20   this operating 
4320: 73 79 73 74 65 6d 2e 22 29 3b 0d 0a 23 65 6e 64  system.");..#end
4330: 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  if..#endif..    
4340: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4350: 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
4360: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
4370: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
4380: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4390: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75  hods.sqlite3_shu
43a0: 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tdown();....    
43b0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
43c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
43d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
43e0: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
43f0: 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
4400: 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69   native connecti
4410: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65  on handle is ope
4420: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
4430: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4440: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
4450: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
4460: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61  he associated na
4470: 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
4480: 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d  handle is open..
4490: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
44a0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
44b0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
44c0: 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d  IsOpen()..    {.
44d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
44e0: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26  (_sql != null) &
44f0: 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69  & !_sql.IsInvali
4500: 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f  d && !_sql.IsClo
4510: 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  sed;..    }.... 
4520: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4530: 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73  ride void Open(s
4540: 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d  tring strFilenam
4550: 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
4560: 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74  ionFlags connect
4570: 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65  ionFlags, SQLite
4580: 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70  OpenFlagsEnum op
4590: 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78  enFlags, int max
45a0: 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75  PoolSize, bool u
45b0: 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a  sePool)..    {..
45c0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
45d0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
45e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
45f0: 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
4600: 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20 74   open, attempt t
4610: 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  o..      //     
4620: 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e 20    close it now. 
4630: 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f   This must be do
4640: 6e 65 20 62 65 63 61 75 73 65 20 74 68 65 20 66  ne because the f
4650: 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20 20  ile name or..   
4660: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65     //       othe
4670: 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61  r parameters tha
4680: 74 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68 65  t may impact the
4690: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
46a0: 62 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20  base..      //  
46b0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20       connection 
46c0: 6d 61 79 20 68 61 76 65 20 63 68 61 6e 67 65 64  may have changed
46d0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
46e0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
46f0: 75 6c 6c 29 20 43 6c 6f 73 65 28 74 72 75 65 29  ull) Close(true)
4700: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ;....      //.. 
4710: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
4720: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
4730: 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73  was not closed s
4740: 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 74 68 72  uccessfully, thr
4750: 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20  ow an..      // 
4760: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 20        exception 
4770: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  now...      //..
4780: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
4790: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
47a0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
47b0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  iteException("co
47c0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
47d0: 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76 65 22  is still active"
47e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65  );....      _use
47f0: 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d  Pool = usePool;.
4800: 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65  .      _fileName
4810: 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d   = strFilename;.
4820: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65  ...      if (use
4830: 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Pool)..      {..
4840: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53          _sql = S
4850: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
4860: 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69  ool.Remove(strFi
4870: 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53  lename, maxPoolS
4880: 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65  ize, out _poolVe
4890: 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21  rsion);....#if !
48a0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
48b0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
48c0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
48d0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
48e0: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20  ng.Format("Open 
48f0: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f  (Pool): {0}", (_
4900: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f  sql != null) ? _
4910: 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a  sql.ToString() :
4920: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65   "<null>"));..#e
4930: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ndif..      }...
4940: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
4950: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4960: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
4970: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4980: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4990: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
49a0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
49b0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
49c0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
49d0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
49e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49    {..          I
49f0: 6e 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20  ntPtr db;..     
4a00: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4a10: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
4a20: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4a30: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
4a40: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
4a50: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
4a60: 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73  onFlags.NoExtens
4a70: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d  ionFunctions) !=
4a80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4a90: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
4aa0: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  onFunctions)..  
4ab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4ac0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
4ad0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4ae0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
4af0: 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69  rop(ToUTF8(strFi
4b00: 6c 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61  lename), openFla
4b10: 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20  gs, out db);..  
4b20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4b30: 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69       else..#endi
4b40: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  f..          {..
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
4b60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4b70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
4b80: 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69  _v2(ToUTF8(strFi
4b90: 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c  lename), out db,
4ba0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50   openFlags, IntP
4bb0: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20  tr.Zero);..     
4bc0: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e       }....#if !N
4bd0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
4be0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
4bf0: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61  N..          Tra
4c00: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
4c10: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e  ing.Format("Open
4c20: 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23  : {0}", db));..#
4c30: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
4c40: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
4c50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
4c60: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4c70: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
4c80: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  l);..          _
4c90: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
4ca0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
4cb0: 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20  (db, true);..   
4cc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4cd0: 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a  lock (_sql) { /*
4ce0: 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65   HACK: Force the
4cf0: 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65   SyncBlock to be
4d00: 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20   "created" now. 
4d10: 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  */ }....        
4d20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4d30: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
4d40: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
4d50: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
4d60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
4d70: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
4d80: 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64  .NewCriticalHand
4d90: 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  le, null, null,.
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c  .            nul
4db0: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73  l, null, _sql, s
4dc0: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20  trFilename, new 
4dd0: 6f 62 6a 65 63 74 5b 5d 20 7b 20 73 74 72 46 69  object[] { strFi
4de0: 6c 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lename,..       
4df0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 46       connectionF
4e00: 6c 61 67 73 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  lags, openFlags,
4e10: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73   maxPoolSize, us
4e20: 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20  ePool }));..    
4e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20    }....      // 
4e40: 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  Bind functions t
4e50: 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  o this connectio
4e60: 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69  n.  If any previ
4e70: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ous functions of
4e80: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a   the same name..
4e90: 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c        // were al
4ea0: 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65  ready bound, the
4eb0: 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e  n the new bindin
4ec0: 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f  gs replace the o
4ed0: 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ld...      if ((
4ee0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
4ef0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
4f00: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
4f10: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
4f20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4f30: 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e  s.NoBindFunction
4f40: 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  s)..      {..   
4f50: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
4f60: 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tions == null)..
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
4f80: 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c  unctions = new L
4f90: 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ist<SQLiteFuncti
4fa0: 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  on>();....      
4fb0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41      _functions.A
4fc0: 64 64 52 61 6e 67 65 28 6e 65 77 20 4c 69 73 74  ddRange(new List
4fd0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e  <SQLiteFunction>
4fe0: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  (SQLiteFunction.
4ff0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68  BindFunctions(th
5000: 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  is, connectionFl
5010: 61 67 73 29 29 29 3b 0d 0a 20 20 20 20 20 20 7d  ags)));..      }
5020: 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d  ....      SetTim
5030: 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20  eout(0);..      
5040: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71  GC.KeepAlive(_sq
5050: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
5060: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5070: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
5080: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
5090: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
50a0: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
50b0: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
50c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
50d0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
50e0: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20  t CountPool().. 
50f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
5100: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
5110: 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e   int> counts = n
5120: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  ull;..        in
5130: 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b  t openCount = 0;
5140: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c  ..        int cl
5150: 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  oseCount = 0;.. 
5160: 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c         int total
5170: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Count = 0;....  
5180: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
5190: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f  ectionPool.GetCo
51a0: 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d  unts(_fileName,.
51b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
51c0: 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65   counts, ref ope
51d0: 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73  nCount, ref clos
51e0: 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  eCount,..       
51f0: 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f       ref totalCo
5200: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
5210: 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75   return totalCou
5220: 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  nt;..    }....  
5230: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5240: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
5250: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
5260: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
5270: 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 5f 73    IntPtr db = _s
5280: 71 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 64  ql;..      if (d
5290: 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
52a0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
52b0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20  teException("no 
52c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
52d0: 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a  e available");..
52e0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
52f0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
5300: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5310: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
5320: 75 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d  ut(db, nTimeoutM
5330: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
5340: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
5350: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
5360: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5370: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
5380: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
5390: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
53a0: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
53b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
53c0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
53d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
53e0: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61  ode n;..      Ra
53f0: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
5400: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
5410: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
5420: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
5430: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e  ount;..      uin
5440: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e  t timeout = (uin
5450: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
5460: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
5470: 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20   * 1000);....   
5480: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
5490: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
54a0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
54b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
54c0: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
54d0: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  ite_stmt);....  
54e0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
54f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
5500: 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b  ow) return true;
5510: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5520: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
5530: 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20  de.Done) return 
5540: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
5550: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
5560: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
5570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5580: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5590: 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20  Code r;....     
55a0: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
55b0: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
55c0: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
55d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
55e0: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
55f0: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
5600: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
5610: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
5620: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
5630: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
5640: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
5650: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
5660: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
5670: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
5680: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
5690: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
56a0: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
56b0: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
56c0: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
56d0: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c      if (r == SQL
56e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
56f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
5700: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
5710: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
5720: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
5730: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
5740: 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((r == SQLiteEr
5750: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
5760: 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | r == SQLiteErr
5770: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
5780: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d  stmt._command !=
5790: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
57a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
57b0: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
57c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
57d0: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
57e0: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
57f0: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
5800: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
5810: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
5820: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
5830: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
5840: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
5850: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
5860: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
5870: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
5880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5890: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
58a0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
58b0: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
58c0: 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut)..           
58d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
58e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
58f0: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47  teException(r, G
5900: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
5910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5920: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
5930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
5950: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
5960: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
5970: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
5980: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
5990: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
59a0: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
59b0: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
59c0: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
59d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
59e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
59f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
5a00: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5a10: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
5a20: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
5a30: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
5a40: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
5a50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5a60: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
5a70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5a80: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
5a90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5aa0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
5ab0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
5ac0: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
5ad0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
5ae0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5af0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
5b00: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
5b10: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
5b20: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
5b30: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
5b40: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
5b50: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
5b60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5b70: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
5b80: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
5b90: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
5ba0: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
5bb0: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
5bc0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
5bd0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
5be0: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
5bf0: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
5c00: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
5c10: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
5c20: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
5c30: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
5c40: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
5c50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
5c60: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
5c70: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
5c80: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
5c90: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
5ca0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
5cb0: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
5cc0: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
5cd0: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
5ce0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
5cf0: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
5d00: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
5d10: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5d20: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
5d30: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
5d40: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
5d50: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
5d60: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
5d70: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
5d80: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
5d90: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
5da0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5db0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
5dc0: 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77  ErrorCode.Unknow
5dd0: 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20  n; // Reset was 
5de0: 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20  OK, with schema 
5df0: 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d  change..      }.
5e00: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
5e10: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
5e20: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
5e30: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
5e40: 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20  ode.Busy)..     
5e50: 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a     return n;....
5e60: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
5e70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
5e80: 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  k)..        thro
5e90: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5ea0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
5eb0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
5ec0: 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20     return n; // 
5ed0: 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20  We reset OK, no 
5ee0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a  schema changes..
5ef0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5f00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
5f10: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
5f20: 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  or()..    {..   
5f30: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c       return GetL
5f40: 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d  astError(null);.
5f50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5f60: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5f70: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
5f80: 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56 61  ror(string defVa
5f90: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5fa0: 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
5fb0: 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e  lt = SQLiteBase.
5fc0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71  GetLastError(_sq
5fd0: 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  l, _sql);..     
5fe0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
5ff0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75  NullOrEmpty(resu
6000: 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65  lt)) result = de
6010: 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  fValue;..       
6020: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
6030: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6040: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6050: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
6060: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
6070: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
6080: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
6090: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
60a0: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
60b0: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e  outMS, out strin
60c0: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
60d0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
60e0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
60f0: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20  mpty(strSql)).. 
6100: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6110: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
6120: 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73  OTE: SQLite does
6130: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
6140: 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61   concept of sepa
6150: 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20  rate schemas..  
6160: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
6170: 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20  n one database; 
6180: 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76  therefore, remov
6190: 65 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  e the base schem
61a0: 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  a name..        
61b0: 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f  //       used to
61c0: 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74   smooth integrat
61d0: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73  ion with the bas
61e0: 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
61f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
6200: 20 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e     data classes.
6210: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
6220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
6230: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63  eSchemaName = (c
6240: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
6250: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
6260: 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e : null;....   
6270: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
6280: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62  .IsNullOrEmpty(b
6290: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d  aseSchemaName)).
62a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
62b0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
62c0: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
62e0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
62f0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
6300: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
6310: 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e           "[{0}].
6320: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
6330: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
6340: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6350: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
6360: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
6370: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
6380: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
6390: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
63a0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
63b0: 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53     "{0}.", baseS
63c0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
63d0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
63e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
63f0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
6400: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
6410: 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ags =..         
6420: 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f   (cnn != null) ?
6430: 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c   cnn.Flags : SQL
6440: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6450: 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20  gs.Default;.... 
6460: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6470: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6480: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61  onFlags.LogPrepa
6490: 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  re) == SQLiteCon
64a0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
64b0: 50 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20  Prepare)..      
64c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
64d0: 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c  ((strSql == null
64e0: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e  ) || (strSql.Len
64f0: 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74  gth == 0) || (st
6500: 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67  rSql.Trim().Leng
6510: 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20  th == 0))..     
6520: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
6530: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50  og.LogMessage("P
6540: 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69  reparing {<nothi
6550: 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20  ng>}...");..    
6560: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
6570: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6580: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
6590: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65b0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
65c0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72  rentCulture, "Pr
65d0: 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e  eparing {{{0}}}.
65e0: 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a  ..", strSql));..
65f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6600: 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49   IntPtr stmt = I
6610: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
6620: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
6630: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
6640: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
6650: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
6660: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69  rorCode n = SQLi
6670: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
6680: 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  ma;..      int r
6690: 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20  etries = 0;..   
66a0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
66b0: 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20  UTF8(strSql);.. 
66c0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
66d0: 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  defs = null;..  
66e0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
66f0: 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d  ent cmd = null;.
6700: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
6710: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
6720: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
6730: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
6740: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
6750: 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65  ..      GCHandle
6760: 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64   handle = GCHand
6770: 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61  le.Alloc(b, GCHa
6780: 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29  ndleType.Pinned)
6790: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
67a0: 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64  psql = handle.Ad
67b0: 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74  drOfPinnedObject
67c0: 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ();..      SQLit
67d0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
67e0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
67f0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
6800: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
6810: 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20        while ((n 
6820: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6830: 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d  de.Schema || n =
6840: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6850: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
6860: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6870: 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65  .Busy) && retrie
6880: 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20  s < 3)..        
6890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79  {..          try
68a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
68b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
68c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
68d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
68e0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
68f0: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
6900: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
6910: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23  ..          {..#
6920: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
6930: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
6940: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6950: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6960: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
6970: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
6980: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
6990: 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75  tmt, out ptr, ou
69a0: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
69b0: 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f  #if USE_PREPARE_
69c0: 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  V2..            
69d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
69e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
69f0: 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c  prepare_v2(_sql,
6a00: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
6a10: 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f  - 1, out stmt, o
6a20: 75 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  ut ptr);..#else.
6a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
6a40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6a50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
6a60: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
6a70: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
6a80: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
6a90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6aa0: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31          len = -1
6ab0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
6ac0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
6ad0: 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d   && TRACE_STATEM
6ae0: 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ENT..           
6af0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
6b00: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
6b10: 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b  Prepare ({0}): {
6b20: 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d  1}", n, stmt));.
6b30: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
6b40: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
6b50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6b60: 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d  .Ok) && (stmt !=
6b70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6ba0: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
6bb0: 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d   != null) statem
6bc0: 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73  entHandle.Dispos
6bd0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
6be0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e      statementHan
6bf0: 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dle = new SQLite
6c00: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28  StatementHandle(
6c10: 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20  _sql, stmt);..  
6c20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6c30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6c40: 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d        if (statem
6c50: 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c  entHandle != nul
6c60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
6c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
6c80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
6c90: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
6ca0: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
6cb0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
6cc0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
6cd0: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
6ce0: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
6cf0: 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  e, null, null,..
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
6d10: 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d  ll, null, statem
6d20: 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71  entHandle, strSq
6d30: 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  l, new object[] 
6d40: 7b 20 63 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20  { cnn,..        
6d50: 20 20 20 20 20 20 73 74 72 53 71 6c 2c 20 70 72        strSql, pr
6d60: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
6d70: 53 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  S }));..        
6d80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6d90: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
6da0: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
6db0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6dc0: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
6dd0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
6de0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6df0: 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20  de.Error)..     
6e00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e10: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
6e20: 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72  ompare(GetLastEr
6e30: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
6e40: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
6e50: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
6e60: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
6e70: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
6e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
6ea0: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
6eb0: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6ed0: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
6ee0: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
6ef0: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
6f00: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
6f10: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
6f20: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6f40: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
6f50: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
6f60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6f70: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
6f80: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
6f90: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
6fa0: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
6fb0: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6fe0: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
6ff0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
7000: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
7010: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7030: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
7040: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
7050: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7060: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
7070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7080: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
7090: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
70a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
70b0: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
70c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
70d0: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
70e0: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26  40 || NET_45) &&
70f0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7100: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7110: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
7120: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
7130: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
7140: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
7150: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
7160: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
7170: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
7180: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
7190: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
71a0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
71d0: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20  Remain = "";..  
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
71f0: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
7200: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7210: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
7220: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7230: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
7240: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
7250: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
7260: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
7270: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
7280: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
7290: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
72a0: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
72b0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
72c0: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
72e0: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7300: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
7310: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
7330: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
7340: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
7350: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
7360: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
7380: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
7390: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
73a0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  , timeoutMS, out
73b0: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73d0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
73e0: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
73f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7400: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7410: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
7420: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7430: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7460: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
7470: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
7480: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7490: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
74a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
74b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
74c0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
74d0: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
74e0: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
74f0: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
7500: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
7510: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
7520: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
7530: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7540: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
7550: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
7560: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
7570: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
7580: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
7590: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
75b0: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
75c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
75d0: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
75e0: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
75f0: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
7600: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
7610: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
7620: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
7630: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
7640: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
7650: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
7660: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7670: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7680: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7690: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
76a0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
76b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
76c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
76d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
76e0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
76f0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
7700: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
7710: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
7720: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
7730: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
7740: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
7750: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
7760: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7770: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
7780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7790: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
77a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
77b0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
77c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
77d0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
77e0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65  ...        strRe
77f0: 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72  main = UTF8ToStr
7800: 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a  ing(ptr, len);..
7810: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
7820: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
7830: 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77   null) cmd = new
7840: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7850: 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74  (this, flags, st
7860: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
7870: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
7880: 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  0, strSql.Length
7890: 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e   - strRemain.Len
78a0: 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b  gth), previous);
78b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
78c0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d  rn cmd;..      }
78d0: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d  ..      finally.
78e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
78f0: 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b    handle.Free();
7900: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
7910: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
7920: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
7930: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
7940: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
7950: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  le, int index)..
7960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
7970: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
7980: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
7990: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
79a0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
79b0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
79c0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
79d0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
79e0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
79f0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
7a00: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
7a10: 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e  r #{1} as NULL..
7a20: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
7a30: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
7a40: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
7a50: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
7a60: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
7a70: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
7a80: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7a90: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c  , int index, Val
7aa0: 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20  ueType value).. 
7ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
7ac0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
7ad0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
7ae0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
7af0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
7b00: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
7b10: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
7b20: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
7b30: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
7b40: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
7b50: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
7b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
7b70: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
7b80: 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65  x, value.GetType
7b90: 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20  (), value));..  
7ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
7bb0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
7bc0: 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28   FormatDateTime(
7bd0: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
7be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7bf0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
7c00: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
7c10: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20  gBuilder();.... 
7c20: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
7c30: 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72  pend(value.ToStr
7c40: 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54  ing("yyyy-MM-ddT
7c50: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
7c60: 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  K"));..        r
7c70: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
7c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
7c90: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
7ca0: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  Kind);..        
7cb0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
7cc0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ');..        res
7cd0: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
7ce0: 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20  .Ticks);....    
7cf0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
7d00: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
7d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
7d20: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
7d30: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
7d40: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7d50: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
7d60: 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  x, DateTime valu
7d70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
7d80: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
7d90: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
7da0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7db0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
7dc0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
7dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
7de0: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
7df0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
7e00: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
7e10: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
7e20: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
7e30: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
7e40: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44   index, typeof(D
7e50: 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74  ateTime), Format
7e60: 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29  DateTime(value))
7e70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7e80: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
7e90: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
7ea0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
7eb0: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
7ec0: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
7ed0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
7ee0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
7ef0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
7f00: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
7f10: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
7f20: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
7f30: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7f40: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
7f50: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
7f60: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
7f70: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
7f80: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
7f90: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
7fa0: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
7fb0: 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75  f(String), (valu
7fc0: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c  e != null) ? val
7fd0: 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  ue : "<null>"));
7fe0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
7ff0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
8000: 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d  ring ToHexadecim
8010: 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  alString(..     
8020: 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d     byte[] array.
8030: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
8040: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  {..        if (a
8050: 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rray == null).. 
8060: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8070: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
8080: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
8090: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
80a0: 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61  ringBuilder(arra
80b0: 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a  y.Length * 2);..
80c0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
80d0: 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e  ngth = array.Len
80e0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
80f0: 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
8100: 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67   0; index < leng
8110: 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
8120: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
8130: 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e  .Append(array[in
8140: 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78  dex].ToString("x
8150: 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  2"));....       
8160: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
8170: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
8180: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
8190: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
81a0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
81b0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
81c0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
81d0: 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
81e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
81f0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
8200: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
8210: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
8220: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
8230: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
8240: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
8250: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
8260: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
8270: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
8280: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
8290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
82a0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
82b0: 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d  x, typeof(Byte[]
82c0: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
82d0: 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d  l) ? ToHexadecim
82e0: 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20  alString(value) 
82f0: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20  : "<null>"));.. 
8300: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8310: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
8320: 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53  id Bind_Double(S
8330: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8340: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
8350: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8360: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75  , int index, dou
8370: 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ble value)..    
8380: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
8390: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
83a0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
83b0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
83c0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
83d0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
83e0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
83f0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
8400: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8410: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
8420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
8430: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
8440: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
8450: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
8460: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8470: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8480: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8490: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
84a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
84b0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68  e3_bind_double(h
84c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
84d0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
84e0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
84f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8500: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
8510: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8520: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
8530: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
8540: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
8550: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
8560: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8570: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
8580: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
8590: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
85a0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
85b0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
85c0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
85d0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
85e0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
85f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8600: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
8610: 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  _Int32(SQLiteSta
8620: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
8630: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8640: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
8650: 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  dex, int value).
8660: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8670: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8680: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8690: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
86a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
86b0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
86c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
86d0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
86e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
86f0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8700: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8710: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8720: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
8730: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8740: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8750: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
8760: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8770: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
8780: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8790: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
87a0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
87b0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
87c0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
87d0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
87e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
87f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8800: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8810: 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c   Bind_UInt32(SQL
8820: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8830: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
8840: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
8850: 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20  int index, uint 
8860: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
8870: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
8880: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
8890: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
88a0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
88b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
88c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
88d0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
88e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
88f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8900: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8910: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8920: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8930: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
8940: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
8950: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
8960: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
8970: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8980: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20  orCode n;....   
8990: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
89a0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
89b0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74  onFlags.BindUInt
89c0: 33 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51  32AsInt64) == SQ
89d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
89e0: 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73  ags.BindUInt32As
89f0: 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20  Int64)..        
8a00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
8a10: 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c  ong value2 = val
8a20: 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ue;....#if !PLAT
8a30: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
8a40: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
8a50: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8a60: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8a70: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
8a80: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8a90: 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ue2);..#elif !SQ
8aa0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8ab0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
8ac0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8ad0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
8ae0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
8af0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
8b00: 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65   value2);..#else
8b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8b20: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
8b30: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
8b40: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8b50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
8b60: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
8b80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8b90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8ba0: 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _uint(handle, in
8bb0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
8bc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8bd0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
8be0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
8bf0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8c00: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
8c10: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8c20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8c30: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8c40: 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69   Bind_Int64(SQLi
8c50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8c60: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
8c70: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
8c80: 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76  nt index, long v
8c90: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
8ca0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
8cb0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8cc0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
8cd0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
8ce0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8cf0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8d00: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8d10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8d20: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8d30: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
8d40: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8d50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8d60: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
8d70: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8d80: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
8d90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
8da0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8db0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8dc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
8dd0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
8de0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
8df0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
8e00: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
8e10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8e20: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8e30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8e40: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
8e50: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
8e60: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
8e70: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
8e80: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
8e90: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
8ea0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
8eb0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
8ec0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
8ed0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
8ee0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
8ef0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
8f00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8f10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8f20: 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34  void Bind_UInt64
8f30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8f40: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
8f50: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
8f60: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75  gs, int index, u
8f70: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
8f80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
8f90: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
8fa0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
8fb0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
8fc0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
8fd0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
8fe0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
8ff0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
9000: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9010: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
9020: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
9030: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
9040: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
9050: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
9060: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
9070: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9080: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9090: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
90a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
90b0: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28  te3_bind_uint64(
90c0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
90d0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
90e0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
90f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
9100: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
9110: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9120: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
9130: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
9140: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
9150: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
9160: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9170: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
9180: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
9190: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
91a0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
91b0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
91c0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
91d0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
91e0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
91f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9200: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
9210: 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  d_Text(SQLiteSta
9220: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
9230: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9240: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
9250: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
9260: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
9270: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
9280: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
9290: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
92a0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
92b0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
92c0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
92d0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
92e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
92f0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
9300: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9310: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
9320: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9330: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
9340: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9350: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
9360: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
9370: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
9380: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  UTF8(value);....
9390: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
93a0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
93b0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
93c0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
93d0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
93e0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
93f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
9400: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
9420: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
9430: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
9440: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
9450: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
9460: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
9470: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9480: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
9490: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
94a0: 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  b, b.Length - 1,
94b0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
94c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
94d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
94e0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
94f0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9500: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9510: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
9520: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9530: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61  ide void Bind_Da
9540: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
9550: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
9560: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9570: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
9580: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74  dex, DateTime dt
9590: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
95a0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
95b0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
95c0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
95d0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
95e0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
95f0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
9600: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9610: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9620: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
9630: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9640: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
9650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9660: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
9670: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b  dle, index, dt);
9680: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
9690: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  dif....        s
96a0: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
96b0: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
96c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
96d0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
96e0: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9710: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
9720: 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a   = dt.Ticks;....
9730: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
9740: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9760: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
9770: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9780: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
9790: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
97a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
97b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
97c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97e0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
97f0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
9800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9810: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
9830: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9840: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9850: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
9860: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
9870: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
9880: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
9890: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
98b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
98c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
98d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
98e0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
98f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
9900: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
9910: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9920: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
9930: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
9940: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
9950: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
9960: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
9970: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
9980: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
9990: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
99a0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
99b0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
99c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
99d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
99f0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
9a00: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
9a10: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
9a20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9a30: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
9a40: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
9a50: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
9a60: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
9a70: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9aa0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9ab0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9ac0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9ad0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9af0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
9b20: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
9b60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
9b70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9b80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9b90: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
9ba0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9bb0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
9bc0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
9be0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
9bf0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9c00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9c10: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
9c20: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
9c30: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
9c40: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9c50: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
9c60: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
9c70: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
9c80: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
9c90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
9ca0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
9cb0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
9cc0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
9cd0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
9ce0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
9cf0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
9d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9d20: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
9d30: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
9d40: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
9d50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9d60: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
9d70: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
9d80: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
9d90: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
9da0: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
9db0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
9dc0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
9dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9de0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
9df0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9e00: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9e10: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9e20: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9e30: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
9e40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e60: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
9e70: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
9e80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9e90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9eb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9ec0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9ed0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ee0: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
9ef0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
9f00: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
9f10: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
9f30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9f40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9f50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
9f60: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
9f70: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
9f80: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
9f90: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
9fa0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
9fb0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
9fc0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
9fd0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
9fe0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
9ff0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
a000: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
a010: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
a020: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
a030: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
a040: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
a050: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a060: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a070: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
a080: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0a0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
a0b0: 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  UTF8(dt);....#if
a0c0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a0d0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0f0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
a100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a110: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
a120: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a130: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
a170: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
a180: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
a1a0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a1d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a1e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a1f0: 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65  bind_text(handle
a200: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
a210: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
a220: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a240: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
a250: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
a260: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
a270: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
a280: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
a2a0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
a2b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a2c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
a2d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a2e0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f  de void Bind_Blo
a2f0: 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  b(SQLiteStatemen
a300: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
a310: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
a320: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
a330: 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29  byte[] blobData)
a340: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a350: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
a360: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
a370: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a380: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
a390: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a3a0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
a3b0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
a3c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a3d0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
a3e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a3f0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
a400: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a410: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
a420: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
a430: 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ata);..        }
a440: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
a450: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
a460: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
a470: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a480: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61  te3_bind_blob(ha
a490: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
a4a0: 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e  bData, blobData.
a4b0: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
a4c0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
a4d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
a4e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
a4f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
a500: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
a510: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
a520: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a530: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
a540: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
a550: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a560: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a570: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
a580: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
a590: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
a5a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
a5b0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
a5c0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
a5d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a5e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a5f0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
a600: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
a610: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
a620: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
a630: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
a640: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
a650: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
a660: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
a670: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
a680: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
a690: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a6a0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a6b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a6c0: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
a6d0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
a6e0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
a6f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
a700: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
a710: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
a720: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
a730: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a740: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
a750: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
a760: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
a770: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
a780: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
a790: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
a7a0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
a7b0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
a7c0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
a7d0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
a7e0: 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73   int value = Uns
a7f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a800: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
a810: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61  rameter_count(ha
a820: 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndle);....      
a830: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
a840: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a850: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
a860: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
a870: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
a880: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a890: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
a8a0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
a8b0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
a8c0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
a8d0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
a8e0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
a8f0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
a900: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
a910: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
a920: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
a930: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63  t {0} paramter c
a940: 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a  ount is {1}.",..
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a960: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61  handleIntPtr, va
a970: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue));..        
a980: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
a990: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
a9a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a9b0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
a9c0: 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65  g Bind_ParamName
a9d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a9e0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
a9f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
aa00: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
aa10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
aa20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
aa30: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
aa40: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
aa50: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
aa60: 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53   name;....#if !S
aa70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
aa80: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b          int len;
aa90: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
aaa0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
aab0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
aac0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
aad0: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e  arameter_name_in
aae0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
aaf0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
ab00: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
ab10: 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38       name = UTF8
ab20: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
ab30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ab40: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
ab50: 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c  ter_name(handle,
ab60: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
ab70: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
ab80: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
ab90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
aba0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
abb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
abc0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
abd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
abe0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
abf0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
ac00: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
ac10: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
ac20: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
ac30: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
ac40: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
ac50: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
ac60: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
ac70: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
ac80: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
ac90: 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d  1} name is {{{2}
aca0: 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  }}.",..         
acb0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
acc0: 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65  Ptr, index, name
acd0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
ace0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
acf0: 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   name;..    }...
ad00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ad10: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
ad20: 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74  ParamIndex(SQLit
ad30: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
ad40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ad50: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74  nFlags flags, st
ad60: 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d  ring paramName).
ad70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
ad80: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
ad90: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
ada0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
adb0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ;..        int i
adc0: 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74  ndex = UnsafeNat
add0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ade0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
adf0: 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20  r_index(handle, 
ae00: 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65  ToUTF8(paramName
ae10: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
ae20: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
ae30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ae40: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
ae50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ae60: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
ae70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ae80: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
ae90: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
aea0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
aeb0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
aec0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
aed0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
aee0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
aef0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
af00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
af10: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
af20: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
af30: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
af40: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
af60: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
af70: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
af80: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
af90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64        return ind
afa0: 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ex;..    }....  
afb0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
afc0: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f  ide int ColumnCo
afd0: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
afe0: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
aff0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b000: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b010: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b020: 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71  n_count(stmt._sq
b030: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20  lite_stmt);..   
b040: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b050: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
b060: 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51  ng ColumnName(SQ
b070: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
b080: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
b090: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
b0a0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
b0b0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
b0c0: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
b0d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b0e0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
b0f0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
b100: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
b110: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
b120: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
b130: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
b140: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b150: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
b160: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
b170: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
b180: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
b190: 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p == IntPtr.Zer
b1a0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  o)..        thro
b1b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
b1c0: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
b1d0: 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74  rCode.NoMem, Get
b1e0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
b1f0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
b200: 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ARD..      retur
b210: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
b220: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
b230: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
b240: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29  8ToString(p, -1)
b250: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b260: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b270: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
b280: 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66  finity ColumnAff
b290: 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74  inity(SQLiteStat
b2a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
b2b0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
b2c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b2d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b2e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
b2f0: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
b300: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
b310: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b320: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
b330: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65  tring ColumnType
b340: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b350: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
b360: 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69  , out TypeAffini
b370: 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  ty nAffinity).. 
b380: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
b390: 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  len;..#if !SQLIT
b3a0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b3b0: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
b3c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b3d0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
b3e0: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
b3f0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b400: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
b410: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
b420: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20     len = -1;..  
b430: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
b440: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b450: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b460: 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
b470: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b480: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
b490: 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d       nAffinity =
b4a0: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
b4b0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
b4c0: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
b4d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
b4e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
b4f0: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
b500: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
b510: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
b520: 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44   ar = stmt.TypeD
b530: 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20  efinitions;..   
b540: 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e       if (ar != n
b550: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
b560: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
b570: 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68  ndex < ar.Length
b580: 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d   && ar[index] !=
b590: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
b5a0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e      return ar[in
b5b0: 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dex];..        }
b5c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b5d0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
b5e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74  ..        //swit
b5f0: 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ch (nAffinity)..
b600: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
b610: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
b620: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
b630: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
b640: 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22   return "BIGINT"
b650: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
b660: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
b670: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
b680: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
b690: 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20  DOUBLE";..      
b6a0: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
b6b0: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
b6c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
b6d0: 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20  urn "BLOB";..   
b6e0: 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74       //  default
b6f0: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
b700: 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d   return "TEXT";.
b710: 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20  .        //}..  
b720: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
b730: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b740: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
b750: 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74  Index(SQLiteStat
b760: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69  ement stmt, stri
b770: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a  ng columnName)..
b780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
b790: 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   x = ColumnCount
b7a0: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
b7b0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
b7c0: 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20   n < x; n++)..  
b7d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
b7e0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
b7f0: 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f  e(columnName, Co
b800: 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  lumnName(stmt, n
b810: 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ), StringCompari
b820: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
b830: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
b840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
b850: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
b860: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
b870: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b880: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
b890: 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  ing ColumnOrigin
b8a0: 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  alName(SQLiteSta
b8b0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
b8c0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
b8d0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
b8e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
b8f0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
b900: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
b910: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b920: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
b930: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
b940: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
b950: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
b960: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
b970: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
b980: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
b990: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
b9a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b9b0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
b9c0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
b9d0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
b9e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b9f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ba00: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
ba10: 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
ba20: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
ba30: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
ba40: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
ba50: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ba60: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
ba70: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
ba80: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
ba90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
baa0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
bab0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
bac0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
bad0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
bae0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
baf0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
bb00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
bb10: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
bb20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
bb30: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
bb40: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
bb50: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
bb60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
bb70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
bb80: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
bb90: 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
bba0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
bbb0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
bbc0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
bbd0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
bbe0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
bbf0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
bc00: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
bc10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bc20: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
bc30: 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ble_name_interop
bc40: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
bc50: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
bc60: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
bc70: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
bc80: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
bc90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bca0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
bcb0: 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  table_name(stmt.
bcc0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
bcd0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
bce0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
bcf0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bd00: 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65  de void ColumnMe
bd10: 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
bd20: 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
bd30: 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
bd40: 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  umn, out string 
bd50: 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74  dataType, out st
bd60: 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75  ring collateSequ
bd70: 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e  ence, out bool n
bd80: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c  otNull, out bool
bd90: 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74   primaryKey, out
bda0: 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d   bool autoIncrem
bdb0: 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ent)..    {..   
bdc0: 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79     IntPtr dataTy
bdd0: 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e  pePtr;..      In
bde0: 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b  tPtr collSeqPtr;
bdf0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74  ..      int nnot
be00: 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Null;..      int
be10: 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20   nprimaryKey;.. 
be20: 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e       int nautoIn
be30: 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  c;..      SQLite
be40: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
be50: 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
be60: 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
be70: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
be80: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
be90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
bea0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
beb0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
bec0: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73  adata_interop(_s
bed0: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
bee0: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
bef0: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
bf00: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
bf10: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
bf20: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
bf30: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
bf40: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
bf50: 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75  c, out dtLen, ou
bf60: 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65  t csLen);..#else
bf70: 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20  ..      dtLen = 
bf80: 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e  -1;..      csLen
bf90: 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20   = -1;....      
bfa0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
bfb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
bfc0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
bfd0: 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54  adata(_sql, ToUT
bfe0: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
bff0: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
c000: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
c010: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
c020: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
c030: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
c040: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
c050: 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e   nautoInc);..#en
c060: 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  dif..      if (n
c070: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
c080: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
c090: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c0a0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
c0b0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64  r());....      d
c0c0: 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f  ataType = UTF8To
c0d0: 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50  String(dataTypeP
c0e0: 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20  tr, dtLen);..   
c0f0: 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e     collateSequen
c100: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
c110: 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73  g(collSeqPtr, cs
c120: 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  Len);....      n
c130: 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75  otNull = (nnotNu
c140: 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ll == 1);..     
c150: 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e   primaryKey = (n
c160: 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29  primaryKey == 1)
c170: 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63  ;..      autoInc
c180: 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49  rement = (nautoI
c190: 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d  nc == 1);..    }
c1a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c1b0: 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
c1c0: 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
c1d0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
c1e0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
c1f0: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
c200: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
c210: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
c220: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
c230: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
c240: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c250: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
c260: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c270: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
c280: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
c290: 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
c2a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c2b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
c2c0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
c2d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
c2e0: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
c2f0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
c300: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
c310: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
c320: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
c330: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
c340: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
c350: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c360: 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79 74  de sbyte GetSByt
c370: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
c380: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
c390: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
c3a0: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
c3b0: 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e 74  d((sbyte)(GetInt
c3c0: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
c3d0: 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
c3e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c3f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c400: 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28  de byte GetByte(
c410: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c420: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
c430: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
c440: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
c450: 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28  (byte)(GetInt32(
c460: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62  stmt, index) & b
c470: 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  yte.MaxValue));.
c480: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c490: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c4a0: 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53  short GetInt16(S
c4b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
c4c0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
c4d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
c4e0: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
c4f0: 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28  short)(GetInt32(
c500: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75  stmt, index) & u
c510: 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29  short.MaxValue))
c520: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c530: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c540: 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74  e ushort GetUInt
c550: 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
c560: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
c570: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
c580: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
c590: 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74 49  ed((ushort)(GetI
c5a0: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
c5b0: 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61  ) & ushort.MaxVa
c5c0: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
c5d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c5e0: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e  erride int GetIn
c5f0: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
c600: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
c610: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
c620: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
c630: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c640: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
c650: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c660: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
c670: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c680: 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74  al override uint
c690: 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74   GetUInt32(SQLit
c6a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
c6b0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
c6c0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
c6d0: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74   unchecked((uint
c6e0: 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  )GetInt32(stmt, 
c6f0: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
c700: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c710: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
c720: 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  tInt64(SQLiteSta
c730: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
c740: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
c750: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
c760: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
c770: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c780: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
c790: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c7a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
c7b0: 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f  umn_int64(stmt._
c7c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
c7d0: 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ex);..#elif !SQL
c7e0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
c7f0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c800: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c810: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74  column_int64_int
c820: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
c830: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
c840: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
c850: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c860: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c870: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c880: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
c890: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
c8a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c8b0: 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67  l override ulong
c8c0: 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74   GetUInt64(SQLit
c8d0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
c8e0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
c8f0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
c900: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e   unchecked((ulon
c910: 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  g)GetInt64(stmt,
c920: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
c930: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c940: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
c950: 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53   GetText(SQLiteS
c960: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
c970: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
c980: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
c990: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
c9a0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
c9b0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
c9c0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
c9d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
c9e0: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
c9f0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
ca00: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
ca10: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
ca20: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
ca30: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
ca40: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ca50: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ca60: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
ca70: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
ca80: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
ca90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
caa0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
cab0: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
cac0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
cad0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
cae0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
caf0: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
cb00: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
cb10: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
cb20: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
cb30: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
cb40: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
cb50: 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
cb60: 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20  ats.Ticks)..    
cb70: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
cb80: 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73  eTime(GetInt64(s
cb90: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
cba0: 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20  tetimeKind);..  
cbb0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
cbc0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
cbd0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
cbe0: 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20  s.JulianDay)..  
cbf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
cc00: 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c  ateTime(GetDoubl
cc10: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
cc20: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
cc30: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
cc40: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
cc50: 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
cc60: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d  mats.UnixEpoch).
cc70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
cc80: 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e  ToDateTime(GetIn
cc90: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
cca0: 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
ccb0: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
ccc0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ccd0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
cce0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
ccf0: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
cd00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
cd10: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
cd20: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
cd30: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
cd40: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
cd50: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
cd60: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
cd70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cd80: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
cd90: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
cda0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d  e_stmt, index),.
cdb0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
cdc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cdd0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
cde0: 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  s(stmt._sqlite_s
cdf0: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23  tmt, index));..#
ce00: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
ce10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ce20: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79  rride long GetBy
ce30: 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tes(SQLiteStatem
ce40: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
ce50: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
ce60: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
ce70: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
ce80: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
ce90: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
cea0: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
ceb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cec0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
ced0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
cee0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
cef0: 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
cf00: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
cf10: 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
cf20: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
cf30: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
cf40: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
cf50: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
cf60: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
cf70: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
cf80: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
cf90: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
cfa0: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
cfb0: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
cfc0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
cfd0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
cfe0: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
cff0: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
d000: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
d010: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
d020: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d030: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
d040: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d050: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
d060: 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69  _blob(stmt._sqli
d070: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
d080: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
d090: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
d0a0: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
d0b0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
d0c0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
d0d0: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
d0e0: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
d0f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d100: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
d110: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
d120: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
d130: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d140: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
d150: 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
d160: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d170: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
d180: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
d190: 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
d1a0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
d1b0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
d1c0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
d1d0: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
d1e0: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
d1f0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
d200: 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
d210: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
d220: 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
d230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
d240: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
d250: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
d260: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
d270: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
d280: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
d290: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
d2a0: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
d2b0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
d2c0: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
d2d0: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
d2e0: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
d2f0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
d300: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
d310: 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
d320: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
d330: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
d340: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
d350: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
d360: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
d370: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
d380: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d390: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
d3a0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
d3b0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
d3c0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
d3d0: 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
d3e0: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
d3f0: 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
d400: 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
d410: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d420: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
d430: 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
d440: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
d450: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
d460: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
d470: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d480: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
d490: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
d4a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d4b0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
d4c0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
d4d0: 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
d4e0: 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
d4f0: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
d500: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
d510: 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
d520: 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
d530: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
d540: 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20  k funcfinal)..  
d550: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
d560: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
d570: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
d580: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
d590: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d5a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
d5b0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
d5c0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
d5d0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
d5e0: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
d5f0: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
d600: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
d610: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
d620: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
d630: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
d640: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d650: 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
d660: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d670: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
d680: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
d690: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
d6a0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
d6b0: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
d6c0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
d6d0: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
d6e0: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
d6f0: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73   ? 1 : 0);..#els
d700: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
d710: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d720: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
d730: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
d740: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
d750: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
d760: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
d770: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
d780: 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66  inal);..      if
d790: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
d7a0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
d7b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d7c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
d7d0: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
d7e0: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
d7f0: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
d800: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
d810: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
d820: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
d830: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
d840: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d850: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d860: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d870: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d880: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d890: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d8a0: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f  de void CreateCo
d8b0: 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  llation(string s
d8c0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c  trCollation, SQL
d8d0: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
d8e0: 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  c, SQLiteCollati
d8f0: 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20  on func16)..    
d900: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
d910: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d920: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d930: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
d940: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
d950: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
d960: 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e  ion), 2, IntPtr.
d970: 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a  Zero, func16);..
d980: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
d990: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d9a0: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
d9b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d9c0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
d9d0: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
d9e0: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
d9f0: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
da00: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66  func);..      if
da10: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
da20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
da30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
da40: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
da50: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
da60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
da70: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
da80: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
da90: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
daa0: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
dab0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
dac0: 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
dad0: 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
dae0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
daf0: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
db00: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
db10: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
db20: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
db30: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
db40: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
db50: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
db60: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
db70: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
db80: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
db90: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
dba0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
dbb0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
dbc0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
dbd0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
dbe0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
dbf0: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
dc00: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
dc10: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
dc20: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
dc30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
dc40: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
dc50: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
dc60: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
dc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
dc80: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
dc90: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
dca0: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
dcb0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
dcc0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
dcd0: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
dce0: 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
dcf0: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
dd00: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
dd10: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
dd20: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
dd30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dd40: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
dd50: 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
dd60: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
dd70: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
dd80: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
dd90: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
dda0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
ddb0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
ddc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ddd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
dde0: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
ddf0: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
de00: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
de10: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
de20: 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
de30: 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
de40: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
de50: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
de60: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
de70: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
de80: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
de90: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
dea0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
deb0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
dec0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ded0: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
dee0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
def0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
df00: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
df10: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
df20: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
df30: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
df40: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
df50: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
df60: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
df70: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
df80: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
df90: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
dfa0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
dfb0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
dfc0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
dfd0: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
dfe0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
dff0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
e000: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
e010: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
e020: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
e030: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
e040: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
e050: 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
e060: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
e070: 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
e080: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
e090: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e0a0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
e0b0: 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
e0c0: 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
e0d0: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
e0e0: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
e0f0: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
e100: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
e110: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
e120: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
e130: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e140: 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
e150: 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
e160: 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
e170: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
e180: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
e190: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
e1a0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
e1b0: 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
e1c0: 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
e1d0: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
e1e0: 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
e1f0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74   len;..      int
e200: 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e   type;..      in
e210: 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e  t enc;..      In
e220: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
e230: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e240: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
e250: 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
e260: 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20  text, out type, 
e270: 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e  out enc, out len
e280: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
e290: 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
e2a0: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
e2b0: 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
e2c0: 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
e2d0: 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
e2e0: 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
e2f0: 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
e300: 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
e310: 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
e320: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
e330: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
e340: 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
e350: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
e360: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
e370: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
e380: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
e390: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e3a0: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
e3b0: 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
e3c0: 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
e3d0: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
e3e0: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
e3f0: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
e400: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
e410: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
e420: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e430: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
e440: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
e450: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
e460: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
e470: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
e480: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
e490: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
e4a0: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
e4b0: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
e4c0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
e4d0: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
e4e0: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
e4f0: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
e500: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
e510: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
e520: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
e530: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
e540: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
e550: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
e560: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
e570: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
e580: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
e590: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
e5a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e5b0: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
e5c0: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
e5d0: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
e5e0: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
e5f0: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
e600: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
e610: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
e620: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
e630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
e640: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
e650: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
e660: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
e670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e680: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
e690: 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
e6a0: 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
e6b0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
e6c0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
e6d0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
e6e0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
e6f0: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
e700: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e710: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
e720: 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
e730: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
e740: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
e750: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e760: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
e770: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70  double_interop(p
e780: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
e790: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
e7a0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
e7b0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
e7c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
e7d0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
e7e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e7f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e800: 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75  int GetParamValu
e810: 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74  eInt32(IntPtr pt
e820: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
e830: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
e840: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e850: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74  te3_value_int(pt
e860: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
e870: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e880: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
e890: 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50  mValueInt64(IntP
e8a0: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
e8b0: 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75        Int64 valu
e8c0: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
e8d0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
e8e0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
e8f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e900: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
e910: 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d  lue_int64(ptr);.
e920: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
e930: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
e940: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e950: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
e960: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
e970: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
e980: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
e990: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
e9a0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
e9b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
e9c0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
e9d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e9e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e9f0: 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
ea00: 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
ea10: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
ea20: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ea30: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
ea40: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
ea50: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
ea60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ea70: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
ea80: 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ext_interop(ptr,
ea90: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
eaa0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
eab0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
eac0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
ead0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
eae0: 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d  alue_text(ptr),.
eaf0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
eb00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
eb10: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
eb20: 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  (ptr));..#endif.
eb30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
eb40: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
eb50: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
eb60: 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49  ParamValueType(I
eb70: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
eb80: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
eb90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
eba0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
ebb0: 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20  e_type(ptr);..  
ebc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ebd0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
ebe0: 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74  d ReturnBlob(Int
ebf0: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74  Ptr context, byt
ec00: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
ec10: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
ec20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ec30: 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62  ite3_result_blob
ec40: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c  (context, value,
ec50: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28   value.Length, (
ec60: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
ec70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ec80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
ec90: 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28  id ReturnDouble(
eca0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
ecb0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
ecc0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
ecd0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
ece0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
ecf0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ed00: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
ed10: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76  ouble(context, v
ed20: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
ed30: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
ed40: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
ed50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ed60: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
ed70: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
ed80: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
ed90: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
eda0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
edb0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
edc0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
edd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ede0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
edf0: 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20  urnError(IntPtr 
ee00: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
ee10: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
ee20: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ee30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ee40: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
ee50: 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61  ntext, ToUTF8(va
ee60: 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67  lue), value.Leng
ee70: 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  th);..    }.... 
ee80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ee90: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
eea0: 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e  Int32(IntPtr con
eeb0: 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29  text, int value)
eec0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
eed0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
eee0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
eef0: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76  t_int(context, v
ef00: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alue);..    }...
ef10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ef20: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
ef30: 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63  rnInt64(IntPtr c
ef40: 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c  ontext, long val
ef50: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
ef60: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ef70: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ef80: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
ef90: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
efa0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
efb0: 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  xt, value);..#el
efc0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
efd0: 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
efe0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
eff0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
f000: 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  t64_interop(cont
f010: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
f020: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
f030: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
f040: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
f050: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
f060: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f070: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
f080: 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50   ReturnNull(IntP
f090: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
f0a0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
f0b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f0c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
f0d0: 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  l(context);..   
f0e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f0f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
f100: 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50   ReturnText(IntP
f110: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
f120: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
f130: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
f140: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
f150: 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
f160: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f170: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
f180: 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38  (context, ToUTF8
f190: 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74  (value), b.Lengt
f1a0: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
f1b0: 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
f1c0: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
f1d0: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
f1e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f1f0: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
f200: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
f210: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
f220: 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  der to create a 
f230: 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  disposable..    
f240: 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  /// module conta
f250: 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
f260: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
f270: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
f280: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f290: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f2a0: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
f2b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
f2c0: 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65  ule object to be
f2d0: 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74   used when creat
f2e0: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64  ing the native d
f2f0: 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65  isposable module
f300: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
f310: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
f320: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
f330: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
f340: 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
f350: 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
f360: 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
f370: 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
f380: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
f390: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
f3a0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f3b0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64  e void CreateMod
f3c0: 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
f3d0: 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43   module, SQLiteC
f3e0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
f3f0: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
f400: 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
f410: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
f420: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
f430: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
f440: 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
f450: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f460: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
f470: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f480: 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20  NoLogModule) != 
f490: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f4a0: 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c  Flags.NoLogModul
f4b0: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
f4c0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
f4d0: 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28  e.LogErrors = ((
f4e0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
f4f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
f500: 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d  gModuleError) ==
f510: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
f520: 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
f530: 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
f540: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
f550: 78 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c  xceptions = ((fl
f560: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
f570: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
f580: 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20  oduleException) 
f590: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
f5a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
f5b0: 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20  leException);.. 
f5c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f5d0: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
f5e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f5f0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
f600: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  iteException("co
f610: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
f620: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29  invalid handle")
f630: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 65 74  ;....        Set
f640: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72  LoadExtension(tr
f650: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f  ue);..        Lo
f660: 61 64 45 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61  adExtension(Unsa
f670: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f680: 53 51 4c 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c  SQLITE_DLL, "sql
f690: 69 74 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74  ite3_vtshim_init
f6a0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
f6b0: 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65  f (module.Create
f6c0: 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  DisposableModule
f6d0: 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20 20  (_sql))..       
f6e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f6f0: 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20  if (_modules == 
f700: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f710: 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20         _modules 
f720: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
f730: 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d  <string, SQLiteM
f740: 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20  odule>();....   
f750: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
f760: 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d  s.Add(module.Nam
f770: 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20  e, module);.... 
f780: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
f790: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
f7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f7b0: 20 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f           _usePoo
f7c0: 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69  l = false;....#i
f7d0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
f7e0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
f7f0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
f800: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
f810: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
f820: 72 6d 61 74 28 22 43 72 65 61 74 65 4d 6f 64 75  rmat("CreateModu
f830: 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c  le (Pool) Disabl
f840: 65 64 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29  ed: {0}", _sql))
f850: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
f860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f870: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
f880: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
f890: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f8a0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f8b0: 69 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72  ion(GetLastError
f8c0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
f8d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f8e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f8f0: 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
f900: 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
f910: 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
f920: 65 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68  er to cleanup th
f930: 65 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20  e resources..   
f940: 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
f950: 77 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f  with a module co
f960: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70  ntaining the imp
f970: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
f980: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
f990: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f9a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
f9b0: 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
f9c0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
f9d0: 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72  module object pr
f9e0: 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20  eviously passed 
f9f0: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
fa00: 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20  ="CreateModule" 
fa10: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68  />..    /// meth
fa20: 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  od...    /// </p
fa30: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
fa40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
fa50: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
fa60: 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61   flags for the a
fa70: 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63  ssociated <see c
fa80: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
fa90: 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
faa0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
fab0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fac0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fad0: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
fae0: 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64  Module(SQLiteMod
faf0: 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69  ule module, SQLi
fb00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
fb10: 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d  s flags)..    {.
fb20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
fb30: 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
fb40: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
fb50: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
fb60: 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c  Exception("modul
fb70: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
fb80: 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29  module.Dispose()
fb90: 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
fba0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fbb0: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72   override IntPtr
fbc0: 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78   AggregateContex
fbd0: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
fbe0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fbf0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
fc00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fc10: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
fc20: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29  text(context, 1)
fc30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
fc40: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
fc50: 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
fc60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fc70: 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
fc80: 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
fc90: 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
fca0: 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72  to declare a vir
fcb0: 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
fcc0: 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  /// in response 
fcd0: 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  to a call into t
fce0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
fcf0: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
fd00: 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  e.xCreate" />.. 
fd10: 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
fd20: 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
fd30: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
fd40: 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61  t" /> virtual ta
fd50: 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20  ble methods...  
fd60: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fd70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fd80: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
fd90: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72  .    /// The vir
fda0: 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
fdb0: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
fdc0: 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20  responsible for 
fdd0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
fde0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67  e..    /// being
fdf0: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
fe00: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fe10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
fe20: 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20  e="strSql">..   
fe30: 20 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20   /// The string 
fe40: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
fe50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73  QL statement des
fe60: 63 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74  cribing the virt
fe70: 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20  ual table to..  
fe80: 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65    /// be declare
fe90: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
fea0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
feb0: 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
fec0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e  ">..    /// Upon
fed0: 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f   success, the co
fee0: 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70  ntents of this p
fef0: 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64  arameter are und
ff00: 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61  efined.  Upon fa
ff10: 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ilure,..    /// 
ff20: 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  it should contai
ff30: 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  n an appropriate
ff40: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d   error message..
ff50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
ff60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
ff70: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
ff80: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
ff90: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
ffa0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
ffb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ffc0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
ffd0: 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56  rorCode DeclareV
ffe0: 69 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20  irtualTable(..  
fff0: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
10000 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20  le module,..    
10010 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71      string strSq
10020 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  l,..        ref 
10030 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
10040 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
10050 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
10060 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10080 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65    error = "conne
10090 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
100a0 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20  alid handle";.. 
100b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
100c0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
100d0 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
100e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49    }....        I
100f0 6e 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74  ntPtr pSql = Int
10100 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
10110 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
10120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10130 20 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74   pSql = SQLiteSt
10140 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
10150 72 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c  romString(strSql
10160 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10170 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
10180 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
10190 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
101a0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d  3_declare_vtab(.
101b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
101c0 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d   _sql, pSql);...
101d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
101e0 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
101f0 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d  orCode.Ok) && (m
10200 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d  odule != null)).
10210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10220 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64   module.Declared
10230 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
10240 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
10250 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10260 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74  .Ok) error = Get
10270 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  LastError();....
10280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10290 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rn n;..        }
102a0 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
102b0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
102c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53            if (pS
102d0 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ql != IntPtr.Zer
102e0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
102f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10300 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
10310 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20  Free(pSql);..   
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71               pSq
10330 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  l = IntPtr.Zero;
10340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10350 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10360 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
10370 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10380 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
10390 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
103a0 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
103b0 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
103c0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
103d0 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65  / function in re
103e0 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
103f0 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63   into the <see c
10400 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
10410 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
10420 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72  " />..    /// or
10430 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
10440 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
10450 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72  xConnect" /> vir
10460 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
10470 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
10480 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10490 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
104a0 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
104b0 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
104c0 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
104d0 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
104e0 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
104f0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
10500 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  / function being
10510 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
10520 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
10530 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10540 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  e="argumentCount
10550 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
10560 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
10570 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74  nts to the funct
10580 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
10590 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
105a0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
105b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
105c0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
105d0 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
105e0 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
105f0 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
10600 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10610 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
10620 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70  or">..    /// Up
10630 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20  on success, the 
10640 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73  contents of this
10650 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75   parameter are u
10660 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20  ndefined.  Upon 
10670 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f  failure,..    //
10680 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74  / it should cont
10690 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61  ain an appropria
106a0 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
106b0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
106c0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
106d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
106e0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
106f0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
10700 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
10710 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
10720 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
10730 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72  ErrorCode Declar
10740 65 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e  eVirtualFunction
10750 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
10760 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
10770 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67  .        int arg
10780 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20  umentCount,..   
10790 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
107a0 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
107b0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
107c0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
107d0 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
107e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
107f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10800 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
10810 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
10820 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
10830 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10840 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10850 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
10860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
10870 74 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74  tPtr pName = Int
10880 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
10890 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
108a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
108b0 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53   pName = SQLiteS
108c0 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
108d0 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29  FromString(name)
108e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
108f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10900 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
10910 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10920 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69  _overload_functi
10930 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
10940 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65       _sql, pName
10950 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29  , argumentCount)
10960 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10970 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
10980 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
10990 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
109a0 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
109b0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
109c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
109d0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
109e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
109f0 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20     if (pName != 
10a00 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
10a10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
10a30 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
10a40 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
10a50 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
10a60 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
10a70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10a80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
10a90 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
10aa0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10ab0 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
10ac0 69 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69 6f  isabled extensio
10ad0 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c  n loading by SQL
10ae0 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ite...    /// </
10af0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10b00 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
10b10 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f  OnOff">..    ///
10b20 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
10b30 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e  loading of exten
10b40 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20  sions, false to 
10b50 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  disable...    //
10b60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
10b70 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10b80 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78  e void SetLoadEx
10b90 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e  tension(bool bOn
10ba0 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
10bb0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
10bc0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
10bd0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10be0 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  ite3_enable_load
10bf0 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20  _extension(..   
10c00 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28           _sql, (
10c10 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29  bOnOff ? -1 : 0)
10c20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
10c30 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
10c40 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
10c50 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
10c60 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
10c70 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
10c80 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10c90 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f  ary>..    /// Lo
10ca0 61 64 73 20 61 20 53 51 4c 69 74 65 20 65 78 74  ads a SQLite ext
10cb0 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66  ension library f
10cc0 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69  rom the named fi
10cd0 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
10ce0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10cf0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
10d00 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  leName">..    //
10d10 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
10d20 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c  e dynamic link l
10d30 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74  ibrary file cont
10d40 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e  aining the exten
10d50 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sion...    /// <
10d60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
10d70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72   <param name="pr
10d80 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ocName">..    //
10d90 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
10da0 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74  e exported funct
10db0 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74  ion used to init
10dc0 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e  ialize the exten
10dd0 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  sion...    /// I
10de0 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61  f null, the defa
10df0 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74  ult "sqlite3_ext
10e00 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c  ension_init" wil
10e10 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  l be used...    
10e20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
10e30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10e40 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74  ide void LoadExt
10e50 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69  ension(string fi
10e60 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70  leName, string p
10e70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  rocName)..    {.
10e80 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c  .        if (fil
10e90 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10eb0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
10ec0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c  llException("fil
10ed0 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eName");....    
10ee0 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f      IntPtr pErro
10ef0 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
10f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
10f10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
10f20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
10f30 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54  tf8FileName = UT
10f40 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e  F8Encoding.UTF8.
10f50 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d  GetBytes(fileNam
10f60 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20  e + '\0');..    
10f70 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
10f80 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75  tf8ProcName = nu
10f90 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
10fa0 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20     if (procName 
10fb0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
10fc0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 50 72            utf8Pr
10fd0 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  ocName = UTF8Enc
10fe0 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
10ff0 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27  tes(procName + '
11000 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  \0');....       
11010 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
11020 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
11030 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11040 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
11050 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
11060 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38        _sql, utf8
11070 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72  FileName, utf8Pr
11080 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72  ocName, ref pErr
11090 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
110a0 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
110b0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
110c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110d0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
110e0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55  teException(n, U
110f0 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72  TF8ToString(pErr
11100 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  or, -1));..     
11110 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
11120 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
11130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
11140 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50   (pError != IntP
11150 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
11160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11170 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
11180 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11190 69 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72  ite3_free(pError
111a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
111b0 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74      pError = Int
111c0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
111d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
111e0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
111f0 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
11200 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64   disabled extend
11210 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20  ed result codes 
11220 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69  returned by SQLi
11230 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  te..    internal
11240 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
11250 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  etExtendedResult
11260 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66  Codes(bool bOnOf
11270 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  f)..    {..     
11280 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11290 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
112a0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
112b0 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74  _extended_result
112c0 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20  _codes(..       
112d0 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
112e0 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
112f0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
11300 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
11310 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
11320 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
11330 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
11340 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
11350 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
11360 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  QLite error code
11370 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11380 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
11390 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f  rorCode ResultCo
113a0 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
113b0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
113c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
113d0 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73  lite3_errcode(_s
113e0 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ql);..    }..   
113f0 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
11400 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64  st SQLite extend
11410 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  ed error code.. 
11420 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11430 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
11440 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73  Code ExtendedRes
11450 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
11460 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
11470 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11480 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
11490 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c  ded_errcode(_sql
114a0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
114b0 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d   /// Add a log m
114c0 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53  essage via the S
114d0 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
114e0 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20  g interface...  
114f0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11500 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73  ide void LogMess
11510 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43  age(SQLiteErrorC
11520 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74  ode iErrCode, st
11530 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
11540 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
11550 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11560 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72  .sqlite3_log(iEr
11570 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d  rCode, ToUTF8(zM
11580 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d  essage));..    }
11590 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
115a0 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65 72  CODEC..    inter
115b0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
115c0 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79  d SetPassword(by
115d0 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74  te[] passwordByt
115e0 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
115f0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
11600 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
11610 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11620 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73  3_key(_sql, pass
11630 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77  wordBytes, passw
11640 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29  ordBytes.Length)
11650 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
11660 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
11670 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
11680 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
11690 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
116a0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
116b0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
116c0 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50  ide void ChangeP
116d0 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e  assword(byte[] n
116e0 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29  ewPasswordBytes)
116f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
11700 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
11710 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
11720 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
11730 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61  ekey(_sql, newPa
11740 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65  sswordBytes, (ne
11750 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  wPasswordBytes =
11760 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65  = null) ? 0 : ne
11770 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c  wPasswordBytes.L
11780 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
11790 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
117a0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
117b0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
117c0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
117d0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
117e0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
117f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11800 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72  e void SetAuthor
11810 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41  izerHook(SQLiteA
11820 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63  uthorizerCallbac
11830 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
11840 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
11850 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11860 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72  3_set_authorizer
11870 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
11880 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
11890 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
118a0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
118b0 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
118c0 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
118d0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
118e0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
118f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11900 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
11910 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
11920 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
11930 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11940 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
11950 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
11960 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
11970 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
11980 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
11990 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
119a0 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
119b0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
119c0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
119d0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
119e0 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
119f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
11a00 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
11a10 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
11a20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
11a30 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11a40 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
11a50 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
11a60 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11a70 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11a80 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
11a90 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
11aa0 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
11ab0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
11ac0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11ad0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
11ae0 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
11af0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
11b00 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
11b10 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11b20 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
11b30 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
11b40 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
11b50 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
11b60 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
11b70 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
11b80 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
11b90 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
11ba0 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
11bb0 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
11bc0 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
11bd0 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
11be0 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
11bf0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11c00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11c10 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
11c20 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
11c30 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
11c40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11c50 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
11c60 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
11c70 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
11c80 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
11c90 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
11ca0 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
11cb0 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
11cc0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11cd0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
11ce0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
11cf0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11d00 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a  e3_config_log(..
11d10 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11d20 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
11d30 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
11d40 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  G, func, IntPtr.
11d50 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
11d60 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
11d70 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
11d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11de0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11df0 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73  .    /// Creates
11e00 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61   a new SQLite ba
11e10 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65  ckup object base
11e20 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65  d on the provide
11e30 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  d destination.. 
11e40 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
11e50 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
11e60 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
11e70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74   connection is t
11e80 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  he one..    /// 
11e90 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
11ea0 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
11eb0 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73  e source and des
11ec0 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
11ed0 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
11ee0 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65  ctions cannot be
11ef0 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20   the same...    
11f00 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11f10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11f20 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68  ame="destCnn">Th
11f30 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
11f40 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11f50 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
11f60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11f70 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64  "destName">The d
11f80 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
11f90 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
11fa0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11fb0 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61  m name="sourceNa
11fc0 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64  me">The source d
11fd0 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
11fe0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11ff0 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c  returns>The newl
12000 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70  y created backup
12010 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
12020 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
12030 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
12040 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a  Backup Initializ
12050 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
12060 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
12070 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20  on destCnn,..   
12080 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74       string dest
12090 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
120a0 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65  tring sourceName
120b0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
120c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
120d0 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29  destCnn == null)
120e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
120f0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
12100 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
12110 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
12120 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d       if (destNam
12130 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12140 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
12150 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
12160 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d  ception("destNam
12170 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
12180 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d  if (sourceName =
12190 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
121a0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
121b0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
121c0 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65  tion("sourceName
121d0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
121e0 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74  QLite3 destSqlit
121f0 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71  e3 = destCnn._sq
12200 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d  l as SQLite3;...
12210 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
12220 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c  tSqlite3 == null
12230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12240 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
12250 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
12270 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
12280 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70  tion has no wrap
12290 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  per.",..        
122a0 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
122b0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
122c0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
122d0 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65  andle destHandle
122e0 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f   = destSqlite3._
122f0 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
12300 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d  if (destHandle =
12310 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12320 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
12330 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
12340 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12350 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
12360 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
12370 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
12380 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
12390 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b       "destCnn");
123a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
123b0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
123c0 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  le sourceHandle 
123d0 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = _sql;....     
123e0 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e     if (sourceHan
123f0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
12400 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12410 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
12420 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69  "Source connecti
12450 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
12460 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
12470 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
12480 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46  DestName = ToUTF
12490 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20  8(destName);..  
124a0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f        byte[] zSo
124b0 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46  urceName = ToUTF
124c0 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a  8(sourceName);..
124d0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
124e0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63  BackupHandle bac
124f0 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  kupHandle = null
12500 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
12510 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12520 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
12530 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
12540 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
12550 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
12560 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
12570 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
12580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12590 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70     IntPtr backup
125a0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
125b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
125c0 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20  ackup_init(..   
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
125e0 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
125f0 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
12600 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  , zSourceName);.
12610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
12620 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  f (backup == Int
12630 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
12640 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12650 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
12660 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74  ErrorCode result
12670 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64  Code = ResultCod
12680 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
12690 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
126a0 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65  ltCode != SQLite
126b0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
126e0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73  iteException(res
126f0 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74  ultCode, GetLast
12700 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
12710 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
12720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12730 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
12740 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
12750 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61  failed to initia
12760 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a  lize backup");..
12770 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12780 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63  .            bac
12790 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  kupHandle = new 
127a0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
127b0 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62  le(destHandle, b
127c0 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20  ackup);..       
127d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
127e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
127f0 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e  nChanged(null, n
12800 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
12810 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
12820 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
12830 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
12840 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
12850 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
12860 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
12870 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e   null, backupHan
12880 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f  dle, null, new o
12890 62 6a 65 63 74 5b 5d 20 7b 20 64 65 73 74 43 6e  bject[] { destCn
128a0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
128b0 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  destName, source
128c0 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20  Name }));....   
128d0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
128e0 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
128f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
12900 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
12910 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
12920 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
12930 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
12940 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
12950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12960 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12970 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
12980 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
12990 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
129a0 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
129b0 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
129c0 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
129d0 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
129e0 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
129f0 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
12a00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12a10 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
12a20 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
12a30 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
12a40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
12a50 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
12a60 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
12a70 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
12a80 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
12a90 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
12aa0 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
12ab0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
12ac0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
12ad0 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
12ae0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
12af0 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
12b00 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
12b10 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
12b20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
12b30 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
12b40 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
12b50 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
12b60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12b70 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
12b80 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
12b90 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
12ba0 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
12bb0 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
12bc0 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
12bd0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
12be0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12bf0 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
12c00 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
12c10 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
12c20 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
12c30 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f  Page,..        o
12c40 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ut bool retry.. 
12c50 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
12c60 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
12c70 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12c80 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
12c90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12ca0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
12cb0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
12cc0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
12cd0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12ce0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
12cf0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
12d00 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
12d10 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
12d20 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
12d30 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12d40 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
12d50 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12d70 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
12d80 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
12d90 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
12da0 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
12db0 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
12dc0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
12dd0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
12de0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
12df0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
12e00 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
12e10 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
12e20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
12e30 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
12e40 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
12e50 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
12e60 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
12e70 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
12e80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12e90 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
12ea0 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
12eb0 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
12ec0 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
12ed0 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
12ee0 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
12ef0 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
12f00 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
12f10 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
12f20 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
12f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12f40 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
12f50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12f60 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
12f70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
12f80 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
12f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
12fa0 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
12fb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
12fc0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
12fd0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
12fe0 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
12ff0 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
13000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13010 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
13020 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
13030 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
13040 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13050 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
13060 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
13070 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
13080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
13090 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
130a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
130b0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
130c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
130d0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
130e0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
130f0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
13100 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
13110 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
13120 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
13130 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
13140 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
13150 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
13160 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
13170 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
13180 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
13190 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
131a0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
131b0 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
131c0 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
131d0 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
131e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
131f0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
13200 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
13210 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
13220 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13230 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
13240 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
13250 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
13260 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
13270 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13280 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
13290 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
132a0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
132b0 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
132c0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
132d0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
132e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
132f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13300 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
13310 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
13320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
13330 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
13340 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
13350 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
13360 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
13370 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
13380 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
13390 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
133a0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
133b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133c0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
133d0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
133e0 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
133f0 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
13400 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
13410 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
13420 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
13430 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
13440 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13450 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
13460 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
13470 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
13480 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
13490 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
134a0 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
134b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
134c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
134d0 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
134e0 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
134f0 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
13500 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
13510 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
13520 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
13530 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
13540 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
13550 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
13560 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
13570 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
13580 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
13590 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
135a0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
135b0 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
135c0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
135d0 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
135e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
135f0 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
13600 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
13610 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
13620 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
13630 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13640 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
13650 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
13660 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
13670 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
13680 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
13690 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
136a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
136b0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
136c0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
136d0 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
136e0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
136f0 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
13700 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
13710 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
13720 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
13730 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
13740 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13750 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
13760 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
13790 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
137a0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
137b0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
137c0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
137d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
137e0 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
137f0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
13800 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
13810 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
13820 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
13830 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
13840 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
13850 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
13860 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
13870 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
13880 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13890 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
138a0 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
138b0 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
138c0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
138d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
138e0 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
138f0 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
13900 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
13910 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
13920 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
13930 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
13940 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
13950 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
13960 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
13970 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
13980 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
13990 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
139a0 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
139b0 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
139c0 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
139d0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
139e0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
139f0 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
13a00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
13a10 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
13a20 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
13a30 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
13a40 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
13a50 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
13a60 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
13a70 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
13a80 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
13a90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13aa0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
13ab0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
13ac0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
13ad0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
13ae0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
13af0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
13b00 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
13b10 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
13b20 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
13b30 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
13b40 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
13b50 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
13b60 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
13b70 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
13b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b90 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
13ba0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
13bb0 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
13bc0 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
13bd0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13be0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
13bf0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
13c00 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13c10 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
13c20 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
13c30 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
13c40 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
13c50 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
13c60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13c70 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
13c80 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
13c90 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
13ca0 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
13cb0 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
13cc0 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
13cd0 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
13ce0 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
13cf0 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
13d00 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
13d10 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
13d20 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
13d30 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
13d40 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
13d50 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
13d60 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
13d70 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
13d80 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
13d90 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
13da0 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
13db0 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
13dc0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
13dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
13e30 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13e40 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
13e50 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
13e60 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
13e70 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
13e80 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
13e90 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
13ea0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
13eb0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
13ec0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
13ed0 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
13ee0 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
13ef0 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
13f00 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
13f10 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
13f20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
13f30 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
13f40 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
13f50 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
13f60 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13f70 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
13f80 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
13f90 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
13fa0 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
13fb0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
13fc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
13fd0 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
13fe0 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
13ff0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
14000 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
14010 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
14020 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
14030 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
14040 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14050 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
14060 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
14070 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
14080 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
14090 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
140a0 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
140b0 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
140c0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
140d0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
140e0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
140f0 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
14100 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
14110 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
14120 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
14130 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
14140 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
14150 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
14160 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
14170 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
14180 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14190 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
141a0 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
141b0 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
141c0 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
141d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
141e0 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
141f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14200 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
14210 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
14220 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
14230 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
14240 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
14250 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
14260 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
14270 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
14280 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
14290 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
142a0 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
142b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
142c0 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
142d0 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
142e0 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
142f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
14300 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
14310 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
14320 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
14330 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14340 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
14350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
14360 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
14370 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
14380 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
14390 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
143a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
143b0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
143c0 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
143d0 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
143e0 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14400 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
14410 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
14420 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
14430 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
14440 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14450 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
14460 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
14470 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
14480 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
144a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
144b0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
144c0 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
144d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
144e0 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
144f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14500 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
14510 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
14520 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
14530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14540 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
14550 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
14560 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
14570 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14580 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
14590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
145b0 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
145c0 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
145d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
145e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
145f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
14600 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
14610 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
14620 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
14630 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
14640 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
14650 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
14660 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14670 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
14680 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
14690 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
146a0 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
146b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
146c0 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
146d0 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
146e0 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
146f0 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
14700 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
14710 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
14720 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
14730 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
14740 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14750 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
14760 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
14770 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
14780 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
14790 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
147a0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
147b0 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
147c0 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
147d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
147e0 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
147f0 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
14800 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
14810 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
14820 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
14830 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
14840 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
14850 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
14860 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
14870 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
14880 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
14890 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c  .      if (IsNul
148a0 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20  l(stmt, index)) 
148b0 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
148c0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
148d0 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74  Affinity aff = t
148e0 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20  yp.Affinity;..  
148f0 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
14900 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
14910 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
14920 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
14930 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
14940 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
14950 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
14960 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
14970 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
14980 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
14990 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  ....      if ((f
149a0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
149b0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
149c0 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51  AllAsText) == SQ
149d0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
149e0 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
149f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
14a00 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
14a10 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
14a20 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d     switch (aff).
14a30 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
14a40 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
14a50 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
14a60 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
14a70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
14a80 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79   && typ.Affinity
14a90 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
14aa0 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  .Text)..        
14ab0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
14ac0 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74  uid(GetText(stmt
14ad0 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20  , index));....  
14ae0 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
14af0 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74  (int)GetBytes(st
14b00 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75  mt, index, 0, nu
14b10 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  ll, 0, 0);..    
14b20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
14b30 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20   new byte[n];.. 
14b40 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
14b50 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
14b60 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20  , b, 0, n);.... 
14b70 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
14b80 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
14b90 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29  Guid && n == 16)
14ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
14bb0 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29  turn new Guid(b)
14bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
14bd0 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20  eturn b;..      
14be0 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
14bf0 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20  ity.DateTime:.. 
14c00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
14c10 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74  GetDateTime(stmt
14c20 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
14c30 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
14c40 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
14c50 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
14c60 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
14c70 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
14c80 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
14c90 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
14ca0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f  ChangeType(GetDo
14cb0 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
14cc0 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
14cd0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
14ce0 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
14cf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
14d00 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
14d10 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
14d20 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
14d30 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
14d40 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e  f(SByte)) return
14d50 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20   GetSByte(stmt, 
14d60 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
14d70 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
14d80 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e  of(Byte)) return
14d90 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69   GetByte(stmt, i
14da0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
14db0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
14dc0 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  f(Int16)) return
14dd0 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20   GetInt16(stmt, 
14de0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
14df0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
14e00 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75  of(UInt16)) retu
14e10 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d  rn GetUInt16(stm
14e20 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
14e30 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
14e40 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65  ypeof(Int32)) re
14e50 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74  turn GetInt32(st
14e60 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
14e70 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
14e80 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20  typeof(UInt32)) 
14e90 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32  return GetUInt32
14ea0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
14eb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
14ec0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34  == typeof(UInt64
14ed0 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
14ee0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
14ef0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
14f00 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
14f10 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28  geType(GetInt64(
14f20 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
14f30 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
14f40 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
14f50 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
14f60 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
14f70 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
14f80 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
14f90 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
14fa0 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
14fb0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
14fc0 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69   stmt, int db, i
14fd0 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20  nt rootPage)..  
14fe0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
14ff0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
15000 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
15010 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15020 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72  te3_table_cursor
15030 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
15040 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20  qlite_stmt, db, 
15050 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73  rootPage);..#els
15060 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
15070 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  -1;..#endif..   
15080 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
15090 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
150a0 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73   GetRowIdForCurs
150b0 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  or(SQLiteStateme
150c0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72  nt stmt, int cur
150d0 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  sor)..    {..#if
150e0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
150f0 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  D..      long ro
15100 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  wid;..      SQLi
15110 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
15120 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
15130 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72  hods.sqlite3_cur
15140 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  sor_rowid_intero
15150 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
15160 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74  tmt, cursor, out
15170 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20   rowid);..      
15180 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
15190 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65  ErrorCode.Ok) re
151a0 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
151b0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
151c0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
151d0 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
151e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
151f0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
15200 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
15210 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
15220 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
15230 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
15240 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
15250 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   int sortMode, o
15260 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ut int onError, 
15270 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
15280 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
15290 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
152a0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
152b0 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a    IntPtr coll;..
152c0 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
152d0 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  n;..      SQLite
152e0 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d  ErrorCode rc;...
152f0 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61  .      rc = Unsa
15300 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15310 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
15320 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f  lumn_info_intero
15330 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
15340 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38  atabase), ToUTF8
15350 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28  (index), ToUTF8(
15360 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72  column), out sor
15370 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72  tMode, out onErr
15380 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75  or, out coll, ou
15390 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20  t colllen);..   
153a0 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
153b0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
153c0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
153d0 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e  eException(rc, n
153e0 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63  ull);....      c
153f0 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
15400 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
15410 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  coll, colllen);.
15420 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f  .#else..      so
15430 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20  rtMode = 0;..   
15440 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d     onError = 2;.
15450 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e  .      collation
15460 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41  Sequence = "BINA
15470 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  RY";..#endif..  
15480 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
15490 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
154a0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
154b0 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20  eControl(string 
154c0 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c  zDbName, int op,
154d0 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20   IntPtr pArg).. 
154e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
154f0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
15500 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
15510 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c  ile_control(_sql
15520 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75  , (zDbName != nu
15530 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62  ll) ? ToUTF8(zDb
15540 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70  Name) : null, op
15550 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d  , pArg);..    }.
15560 0a 20 20 7d 0d 0a 7d 0d 0a                       .  }..}..