System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6322386fc77f7c561371228a7b23edb6903cf554:


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 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  NT.  Optionally,
3bf0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73   attempts to res
3c00: 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f  et and/or..    /
3c10: 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57  // compact the W
3c20: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
3c30: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e  , if applicable.
3c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3c50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3c60: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65  aram name="nByte
3c70: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
3c80: 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65   requested numbe
3c90: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72  r of bytes to fr
3ca0: 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ee...    /// </p
3cb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3cc0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
3cd0: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
3ce0: 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74  -zero to attempt
3cf0: 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a   a heap reset...
3d00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3d10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3d20: 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e   name="compact">
3d30: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
3d40: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65  ro to attempt he
3d50: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a  ap compaction...
3d60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3d70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3d80: 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a   name="nFree">..
3d90: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
3da0: 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74 75  er of bytes actu
3db0: 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69  ally freed.  Thi
3dc0: 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a  s value may be z
3dd0: 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
3de0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3df0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
3e00: 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etOk">..    /// 
3e10: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
3e20: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
3e30: 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77 61  he heap reset wa
3e40: 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20  s successful... 
3e50: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3e60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3e70: 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e  name="nLargest">
3e80: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69  ..    /// The si
3e90: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
3ea0: 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65  t committed free
3eb0: 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65   block in the he
3ec0: 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ap, in bytes... 
3ed0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
3ee0: 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75  e will be zero u
3ef0: 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61  nless heap compa
3f00: 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ction is enabled
3f10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3f20: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
3f30: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
3f40: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
3f50: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69  e return code (i
3f60: 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63  .e. zero for suc
3f70: 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  cess and non-zer
3f80: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66  o..    /// for f
3f90: 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f  ailure)...    //
3fa0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
3fb0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
3fc0: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
3fd0: 65 20 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d  e StaticReleaseM
3fe0: 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  emory(..        
3ff0: 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20  int nBytes,..   
4000: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c       bool reset,
4010: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63  ..        bool c
4020: 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20  ompact,..       
4030: 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d   ref int nFree,.
4040: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
4050: 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20  l resetOk,..    
4060: 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61      ref uint nLa
4070: 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29  rgest..        )
4080: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4090: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
40a0: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
40b0: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
40c0: 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f       int nFreeLo
40d0: 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  cal = UnsafeNati
40e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
40f0: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
4100: 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  (nBytes);..     
4110: 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74     uint nLargest
4120: 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20  Local = 0;..    
4130: 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b      bool resetOk
4140: 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  Local = false;..
4150: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
4160: 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d         if ((rc =
4170: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4180: 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74 29 0d  e.Ok) && reset).
4190: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
41a0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
41b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
41c0: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72  .sqlite3_win32_r
41d0: 65 73 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a  eset_heap();....
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
41f0: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
4200: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
4210: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74             reset
4220: 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d  OkLocal = true;.
4230: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4240: 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d        if ((rc ==
4250: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4260: 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29  .Ok) && compact)
4270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
4280: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4290: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77  ethods.sqlite3_w
42a0: 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61  in32_compact_hea
42b0: 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f  p(ref nLargestLo
42c0: 63 61 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  cal);..#else..  
42d0: 20 20 20 20 20 20 69 66 20 28 72 65 73 65 74 20        if (reset 
42e0: 7c 7c 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20  || compact)..   
42f0: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
4300: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f  LiteErrorCode.No
4310: 74 46 6f 75 6e 64 3b 0d 0a 23 65 6e 64 69 66 0d  tFound;..#endif.
4320: 0a 0d 0a 20 20 20 20 20 20 20 20 6e 46 72 65 65  ...        nFree
4330: 20 3d 20 6e 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a   = nFreeLocal;..
4340: 20 20 20 20 20 20 20 20 6e 4c 61 72 67 65 73 74          nLargest
4350: 20 3d 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c   = nLargestLocal
4360: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 65 74  ;..        reset
4370: 4f 6b 20 3d 20 72 65 73 65 74 4f 6b 4c 6f 63 61  Ok = resetOkLoca
4380: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  l;....        re
4390: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
43a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
43b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68  ary>..    /// Sh
43c0: 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74  utdown the SQLit
43d0: 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74  e engine so that
43e0: 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 61   it can be resta
43f0: 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65 72  rted with differ
4400: 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ent..    /// con
4410: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
4420: 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f  ns.  We depend o
4430: 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a  n auto initializ
4440: 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72  ation to recover
4450: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4460: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4470: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
4480: 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  a standard SQLit
4490: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f  e result code.</
44a0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
44b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
44c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
44d0: 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20  Shutdown()..    
44e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
44f0: 6e 20 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e  n StaticShutdown
4500: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d  (false);..    }.
4510: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
4520: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68  ary>..    /// Sh
4530: 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74  utdown the SQLit
4540: 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74  e engine so that
4550: 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 61   it can be resta
4560: 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65 72  rted with differ
4570: 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ent..    /// con
4580: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
4590: 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f  ns.  We depend o
45a0: 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a  n auto initializ
45b0: 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72  ation to recover
45c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
45d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
45e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 72 65  param name="dire
45f0: 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20 20 20 2f  ctories">..    /
4600: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72  // Non-zero to r
4610: 65 73 65 74 20 74 68 65 20 64 61 74 61 62 61 73  eset the databas
4620: 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20  e and temporary 
4630: 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f 20 74  directories to t
4640: 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f 20 64 65  heir..    /// de
4650: 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68  fault values, wh
4660: 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75  ich should be nu
4670: 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20 20 54 68  ll for both.  Th
4680: 69 73 20 70 61 72 61 6d 65 74 65 72 20 68 61 73  is parameter has
4690: 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65 66 66   no..    /// eff
46a0: 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f  ect on non-Windo
46b0: 77 73 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  ws operating sys
46c0: 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tems...    /// <
46d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
46e0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
46f0: 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s a standard SQL
4700: 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e  ite result code.
4710: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4720: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4730: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4740: 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28 0d  StaticShutdown(.
4750: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69  .        bool di
4760: 72 65 63 74 6f 72 69 65 73 0d 0a 20 20 20 20 20  rectories..     
4770: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
4780: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4790: 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65  Code rc = SQLite
47a0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d  ErrorCode.Ok;...
47b0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72  .        if (dir
47c0: 65 63 74 6f 72 69 65 73 29 0d 0a 20 20 20 20 20  ectories)..     
47d0: 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57     {..#if WINDOW
47e0: 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  S..            i
47f0: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
4800: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
4820: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4830: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77  ethods.sqlite3_w
4840: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
4850: 72 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a  ry(1, null);....
4860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4870: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
4880: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
4890: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
48a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
48b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
48c0: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
48d0: 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73 65  2, null);..#else
48e0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
48f0: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
4900: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
4910: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
4920: 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
4930: 20 20 20 20 20 20 20 20 20 22 53 68 75 74 64 6f           "Shutdo
4940: 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74  wn: Cannot reset
4950: 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20   directories on 
4960: 74 68 69 73 20 6f 70 65 72 61 74 69 6e 67 20 73  this operating s
4970: 79 73 74 65 6d 2e 22 29 3b 0d 0a 23 65 6e 64 69  ystem.");..#endi
4980: 66 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  f..#endif..     
4990: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
49a0: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
49b0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
49c0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
49d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
49e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75 74  ods.sqlite3_shut
49f0: 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  down();....     
4a00: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
4a10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
4a20: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4a30: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
4a40: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
4a50: 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
4a60: 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e  n handle is open
4a70: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4a80: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4a90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
4aa0: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
4ab0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74  e associated nat
4ac0: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
4ad0: 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a  andle is open...
4ae0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
4af0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4b00: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
4b10: 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a  sOpen()..    {..
4b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4b30: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26  _sql != null) &&
4b40: 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64   !_sql.IsInvalid
4b50: 20 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73   && !_sql.IsClos
4b60: 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
4b70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4b80: 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73 74  ide void Open(st
4b90: 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65  ring strFilename
4ba0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
4bb0: 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69  onFlags connecti
4bc0: 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f  onFlags, SQLiteO
4bd0: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65  penFlagsEnum ope
4be0: 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50  nFlags, int maxP
4bf0: 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73  oolSize, bool us
4c00: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20  ePool)..    {.. 
4c10: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
4c20: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64  / NOTE: If the d
4c30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4c40: 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
4c50: 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20 74 6f  open, attempt to
4c60: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
4c70: 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e 20 20   close it now.  
4c80: 54 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e  This must be don
4c90: 65 20 62 65 63 61 75 73 65 20 74 68 65 20 66 69  e because the fi
4ca0: 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20 20 20  le name or..    
4cb0: 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
4cc0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
4cd0: 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68 65 20   may impact the 
4ce0: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
4cf0: 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ase..      //   
4d00: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d      connection m
4d10: 61 79 20 68 61 76 65 20 63 68 61 6e 67 65 64 2e  ay have changed.
4d20: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
4d30: 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75    if (_sql != nu
4d40: 6c 6c 29 20 43 6c 6f 73 65 28 74 72 75 65 29 3b  ll) Close(true);
4d50: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
4d60: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
4d70: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  the connection w
4d80: 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73 75  as not closed su
4d90: 63 63 65 73 73 66 75 6c 6c 79 2c 20 74 68 72 6f  ccessfully, thro
4da0: 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20  w an..      //  
4db0: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 20 6e       exception n
4dc0: 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ow...      //.. 
4dd0: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d       if (_sql !=
4de0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4df0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
4e00: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e  teException("con
4e10: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
4e20: 73 20 73 74 69 6c 6c 20 61 63 74 69 76 65 22 29  s still active")
4e30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50  ;....      _useP
4e40: 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a  ool = usePool;..
4e50: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
4e60: 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a  = strFilename;..
4e70: 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50  ..      if (useP
4e80: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
4e90: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51         _sql = SQ
4ea0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
4eb0: 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c  ol.Remove(strFil
4ec0: 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69  ename, maxPoolSi
4ed0: 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72  ze, out _poolVer
4ee0: 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e  sion);....#if !N
4ef0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
4f00: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
4f10: 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
4f20: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
4f30: 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28  g.Format("Open (
4f40: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73  Pool): {0}", (_s
4f50: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73  ql != null) ? _s
4f60: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  ql.ToString() : 
4f70: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e  "<null>"));..#en
4f80: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
4f90: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
4fa0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
4fb0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
4fc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4fd0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4fe0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
4ff0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
5000: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
5010: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
5020: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
5030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
5040: 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20 20  tPtr db;..      
5050: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5060: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
5070: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5080: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
5090: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
50a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
50b0: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
50c0: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
50d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
50e0: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
50f0: 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  nFunctions)..   
5100: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5110: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
5120: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5130: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
5140: 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  op(ToUTF8(strFil
5150: 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67  ename), openFlag
5160: 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20 20  s, out db);..   
5170: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5180: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
5190: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
51a0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
51b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
51c0: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
51d0: 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  v2(ToUTF8(strFil
51e0: 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20  ename), out db, 
51f0: 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50 74  openFlags, IntPt
5200: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20  r.Zero);..      
5210: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45      }....#if !NE
5220: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
5230: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
5240: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63  ..          Trac
5250: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
5260: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a  ng.Format("Open:
5270: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
5280: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
5290: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
52a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
52b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
52c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
52d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
52e0: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
52f0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
5300: 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  db, true);..    
5310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
5320: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
5330: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
5340: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
5350: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
5360: 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  / }....        S
5370: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
5380: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
5390: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
53a0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
53b0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
53c0: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
53d0: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
53e0: 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  e, null, null,..
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
5400: 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74  , null, _sql, st
5410: 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f  rFilename, new o
5420: 62 6a 65 63 74 5b 5d 20 7b 20 73 74 72 46 69 6c  bject[] { strFil
5430: 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  ename,..        
5440: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c      connectionFl
5450: 61 67 73 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20  ags, openFlags, 
5460: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65  maxPoolSize, use
5470: 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20 20  Pool }));..     
5480: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42   }....      // B
5490: 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ind functions to
54a0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
54b0: 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f  .  If any previo
54c0: 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  us functions of 
54d0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20  the same name.. 
54e0: 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72       // were alr
54f0: 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e  eady bound, then
5500: 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67   the new binding
5510: 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c  s replace the ol
5520: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28 63  d...      if ((c
5530: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
5540: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5550: 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e  nFlags.NoBindFun
5560: 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74  ctions) != SQLit
5570: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5580: 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  .NoBindFunctions
5590: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
55a0: 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74        if (_funct
55b0: 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75               _fu
55d0: 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69  nctions = new Li
55e0: 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  st<SQLiteFunctio
55f0: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
5600: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64     _functions.Ad
5610: 64 52 61 6e 67 65 28 6e 65 77 20 4c 69 73 74 3c  dRange(new List<
5620: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
5630: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
5640: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
5650: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
5660: 67 73 29 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  gs)));..      }.
5670: 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65  ...      SetTime
5680: 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47  out(0);..      G
5690: 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c  C.KeepAlive(_sql
56a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
56b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
56c0: 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f  de void ClearPoo
56d0: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
56e0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
56f0: 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c  onPool.ClearPool
5700: 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  (_fileName);..  
5710: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5720: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
5730: 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20   CountPool()..  
5740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63    {..        Dic
5750: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
5760: 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75  int> counts = nu
5770: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ll;..        int
5780: 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d   openCount = 0;.
5790: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f  .        int clo
57a0: 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  seCount = 0;..  
57b0: 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43        int totalC
57c0: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  ount = 0;....   
57d0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
57e0: 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75  ctionPool.GetCou
57f0: 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a  nts(_fileName,..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
5810: 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e  counts, ref open
5820: 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65  Count, ref close
5830: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
5840: 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75      ref totalCou
5850: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
5860: 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e  return totalCoun
5870: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
5880: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5890: 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f  de void SetTimeo
58a0: 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d  ut(int nTimeoutM
58b0: 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  S)..    {..     
58c0: 20 49 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71   IntPtr db = _sq
58d0: 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62  l;..      if (db
58e0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
58f0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5900: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
5910: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5920: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20   available");.. 
5930: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5940: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5950: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5960: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
5970: 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  t(db, nTimeoutMS
5980: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
5990: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
59a0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
59b0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
59c0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
59d0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
59e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
59f0: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53  ride bool Step(S
5a00: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
5a10: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
5a20: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5a30: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  de n;..      Ran
5a40: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
5a50: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
5a60: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
5a70: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
5a80: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
5a90: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
5aa0: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
5ab0: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
5ac0: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
5ad0: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
5ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5af0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5b00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5b10: 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69  _step(stmt._sqli
5b20: 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  te_stmt);....   
5b30: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
5b40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f  LiteErrorCode.Ro
5b50: 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  w) return true;.
5b60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
5b70: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5b80: 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66  e.Done) return f
5b90: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
5ba0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
5bb0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
5bc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5bd0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5be0: 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode r;....      
5bf0: 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20      // An error 
5c00: 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70  occurred, attemp
5c10: 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  t to reset the s
5c20: 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68  tatement.  If th
5c30: 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62  e reset worked b
5c40: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ecause the..    
5c50: 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20        // schema 
5c60: 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d  has changed, re-
5c70: 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61  try the step aga
5c80: 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72  in.  If it error
5c90: 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74  ed our because t
5ca0: 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  he database..   
5cb0: 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63         // is loc
5cc0: 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72  ked, then keep r
5cd0: 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68  etrying until th
5ce0: 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75  e command timeou
5cf0: 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  t occurs...     
5d00: 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73       r = Reset(s
5d10: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
5d20: 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69     if (r == SQLi
5d30: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
5d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
5d50: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5d60: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
5d70: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
5d80: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
5d90: 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((r == SQLiteErr
5da0: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
5db0: 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   r == SQLiteErro
5dc0: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73  rCode.Busy) && s
5dd0: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20  tmt._command != 
5de0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5e00: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5e20: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
5e30: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
5e40: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
5e50: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
5e60: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
5e70: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
5e80: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
5e90: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
5ea0: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
5eb0: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
5ec0: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5ee0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
5ef0: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
5f00: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
5f10: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
5f20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5f30: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5f40: 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65  eException(r, Ge
5f50: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5f70: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
5f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5fa0: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
5fb0: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
5fc0: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
5fd0: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
5fe0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
5ff0: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
6000: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
6010: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
6020: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6030: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
6040: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6050: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6060: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
6070: 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53  rrorCode Reset(S
6080: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6090: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
60a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
60b0: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
60c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
60d0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
60e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
60f0: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
6100: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
6110: 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  stmt);..#else.. 
6120: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
6130: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6140: 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e  ite3_reset(stmt.
6150: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
6160: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
6170: 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  // If the schema
6180: 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e   changed, try an
6190: 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d  d re-prepare it.
61a0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
61b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
61c0: 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b  Schema)..      {
61d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63  ..        // Rec
61e0: 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74  reate a dummy st
61f0: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
6200: 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20   string str;..  
6210: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
6220: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70  iteStatement tmp
6230: 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c   = Prepare(null,
6240: 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d   stmt._sqlStatem
6250: 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74  ent, null, (uint
6260: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
6270: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
6280: 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72  * 1000), out str
6290: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
62a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61           // Fina
62b0: 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e  lize the existin
62c0: 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  g statement..   
62d0: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
62e0: 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65  ite_stmt.Dispose
62f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ();..          /
6300: 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77  / Reassign a new
6310: 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74   statement point
6320: 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74  er to the old st
6330: 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61  atement and clea
6340: 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  r the temporary 
6350: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73  one..          s
6360: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6370: 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73   = tmp._sqlite_s
6380: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tmt;..          
6390: 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmp._sqlite_stmt
63a0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
63b0: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
63c0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
63d0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
63e0: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
63f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6400: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
6410: 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e  rrorCode.Unknown
6420: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
6430: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
6440: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
6450: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
6460: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
6470: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
6480: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6490: 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
64a0: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20    return n;.... 
64b0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
64c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
64d0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
64e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
64f0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6500: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
6510: 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57    return n; // W
6520: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
6530: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
6540: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6550: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
6560: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
6570: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
6580: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61      return GetLa
6590: 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a  stError(null);..
65a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
65b0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
65c0: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
65d0: 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c  or(string defVal
65e0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
65f0: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
6600: 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47  t = SQLiteBase.G
6610: 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  etLastError(_sql
6620: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
6630: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
6640: 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
6650: 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66  t)) result = def
6660: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
6670: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
6680: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6690: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
66a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50  QLiteStatement P
66b0: 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e  repare(SQLiteCon
66c0: 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72  nection cnn, str
66d0: 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69  ing strSql, SQLi
66e0: 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76  teStatement prev
66f0: 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f  ious, uint timeo
6700: 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67  utMS, out string
6710: 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20   strRemain)..   
6720: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53   {..      if (!S
6730: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
6740: 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20  pty(strSql))..  
6750: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
6760: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
6770: 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20  TE: SQLite does 
6780: 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20  not support the 
6790: 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72  concept of separ
67a0: 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20  ate schemas..   
67b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
67c0: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74   one database; t
67d0: 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65  herefore, remove
67e0: 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61   the base schema
67f0: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   name..        /
6800: 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  /       used to 
6810: 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69  smooth integrati
6820: 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65  on with the base
6830: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d   .NET Framework.
6840: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
6850: 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d    data classes..
6860: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
6870: 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65       string base
6880: 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e  SchemaName = (cn
6890: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
68a0: 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  ._baseSchemaName
68b0: 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
68c0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
68d0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61  IsNullOrEmpty(ba
68e0: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a  seSchemaName))..
68f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6900: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
6910: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
6930: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
6940: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
6950: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
6960: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
6970: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
6980: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
6990: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
69a0: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
69b0: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
69c0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
69d0: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
69e0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
69f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6a00: 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63    "{0}.", baseSc
6a10: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
6a20: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
6a30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
6a40: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
6a50: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
6a60: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
6a70: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
6a80: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
6a90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6aa0: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20  s.Default;....  
6ab0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6ac0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6ad0: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
6ae0: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
6af0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
6b00: 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b  repare)..      {
6b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
6b20: 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29  (strSql == null)
6b30: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67   || (strSql.Leng
6b40: 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72  th == 0) || (str
6b50: 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74  Sql.Trim().Lengt
6b60: 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  h == 0))..      
6b70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
6b80: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72  g.LogMessage("Pr
6b90: 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e  eparing {<nothin
6ba0: 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20  g>}...");..     
6bb0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
6bc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
6bd0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
6be0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c00: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
6c10: 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65  entCulture, "Pre
6c20: 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e  paring {{{0}}}..
6c30: 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20  .", strSql));.. 
6c40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6c50: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
6c60: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
6c70: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49    IntPtr ptr = I
6c80: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
6c90: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
6ca0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
6cb0: 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74  orCode n = SQLit
6cc0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
6cd0: 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65  a;..      int re
6ce0: 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  tries = 0;..    
6cf0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
6d00: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
6d10: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
6d20: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
6d30: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6d40: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
6d50: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
6d60: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
6d70: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
6d80: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
6d90: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
6da0: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
6db0: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
6dc0: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
6dd0: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
6de0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
6df0: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
6e00: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
6e10: 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
6e20: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
6e30: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
6e40: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74  = null;..      t
6e50: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
6e60: 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d       while ((n =
6e70: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6e80: 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d  e.Schema || n ==
6e90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6ea0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
6eb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6ec0: 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73  Busy) && retries
6ed0: 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b   < 3)..        {
6ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d  ..          try.
6ef0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
6f00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
6f10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
6f20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6f30: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
6f40: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
6f50: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
6f60: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  .          {..#i
6f70: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
6f80: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
6f90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6fa0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6fb0: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
6fc0: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
6fd0: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
6fe0: 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74  mt, out ptr, out
6ff0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
7000: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
7010: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
7020: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7030: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
7040: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
7050: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
7060: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
7070: 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t ptr);..#else..
7080: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
7090: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
70a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
70b0: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
70c0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
70d0: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29  t stmt, out ptr)
70e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
70f0: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
7100: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
7110: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
7120: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
7130: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
7140: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
7150: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50  String.Format("P
7160: 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31  repare ({0}): {1
7170: 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a  }", n, stmt));..
7180: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
7190: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
71a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
71b0: 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20  Ok) && (stmt != 
71c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
71d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
71f0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
7200: 21 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65  != null) stateme
7210: 6e 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65  ntHandle.Dispose
7220: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7230: 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64     statementHand
7240: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  le = new SQLiteS
7250: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f  tatementHandle(_
7260: 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20  sql, stmt);..   
7270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7280: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7290: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
72a0: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
72b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
72d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
72e0: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
72f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
7300: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
7310: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7320: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
7330: 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
7340: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
7360: 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65  l, null, stateme
7370: 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c  ntHandle, strSql
7380: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
7390: 20 63 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20   cnn,..         
73a0: 20 20 20 20 20 73 74 72 53 71 6c 2c 20 70 72 65       strSql, pre
73b0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
73c0: 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
73d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
73e0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
73f0: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
7400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7410: 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20  tries++;..      
7420: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
7430: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7440: 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20  e.Error)..      
7450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7460: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
7470: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
7480: 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59  or(), "near \"TY
7490: 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72  PES\": syntax er
74a0: 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ror", StringComp
74b0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
74c0: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
74d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
74f0: 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49  t pos = strSql.I
7500: 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20  ndexOf(';');..  
7510: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7520: 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d  pos == -1) pos =
7530: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
7540: 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   1;....         
7550: 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20       typedefs = 
7560: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
7570: 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20  (0, pos + 1);.. 
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7590: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  Sql = strSql.Sub
75a0: 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b  string(pos + 1);
75b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
75c0: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
75d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
75e0: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
75f0: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
7600: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
7610: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
7630: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
7640: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
7650: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75  s, timeoutMS, ou
7660: 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  t strRemain);.. 
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7680: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
7690: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
76a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
76b0: 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20       if (cmd != 
76c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
76d0: 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79         cmd.SetTy
76e0: 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a  pes(typedefs);..
76f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7700: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
7710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
7720: 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34  (NET_35 || NET_4
7730: 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20  0 || NET_45) && 
7740: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
7750: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7760: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
7770: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
7780: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
7790: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
77a0: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
77b0: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
77c0: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
77d0: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
77e0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
77f0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
7800: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7810: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
7820: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
7830: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
7840: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
7850: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7860: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
7870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7880: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
7890: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
78a0: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
78b0: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
78c0: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
78d0: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
78e0: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
78f0: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
7900: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
7910: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
7920: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7930: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
7960: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
7980: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
7990: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
79a0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
79b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
79d0: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
79e0: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
79f0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
7a00: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7a20: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
7a30: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
7a40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7a50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7a60: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
7a70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7a80: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
7ab0: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
7ac0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
7ad0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7ae0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7af0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
7b00: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
7b10: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
7b20: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
7b30: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
7b40: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
7b50: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
7b60: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
7b70: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
7b80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7b90: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
7ba0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
7bb0: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
7bc0: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
7bd0: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
7be0: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
7c00: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
7c10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
7c20: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
7c30: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
7c40: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
7c50: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
7c60: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
7c70: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
7c80: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
7c90: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
7ca0: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
7cb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7cc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7cd0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7ce0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
7cf0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
7d00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7d10: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
7d20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7d30: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
7d40: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
7d50: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
7d60: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
7d70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
7d80: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
7d90: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
7da0: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
7db0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
7dd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7de0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
7df0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
7e00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7e10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
7e20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
7e30: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d  ..        strRem
7e40: 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ain = UTF8ToStri
7e50: 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d  ng(ptr, len);...
7e60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61  .        if (sta
7e70: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
7e80: 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20  null) cmd = new 
7e90: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
7ea0: 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61  this, flags, sta
7eb0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
7ec0: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
7ed0: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
7ee0: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
7ef0: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
7f00: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
7f10: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
7f20: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
7f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7f40: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
7f50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
7f60: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
7f70: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
7f80: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
7f90: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
7fa0: 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  e, int index).. 
7fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
7fc0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
7fd0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
7fe0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
7ff0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
8000: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
8010: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
8020: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
8030: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
8040: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
8050: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
8060: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
8070: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
8080: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
8090: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
80a0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
80b0: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
80c0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
80d0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
80e0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
80f0: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
8100: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
8110: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
8120: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
8130: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
8140: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
8150: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
8160: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
8170: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
8180: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
8190: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
81a0: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
81b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
81c0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
81d0: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
81e0: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
81f0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
8200: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
8210: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
8220: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
8230: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8240: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
8250: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
8260: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
8270: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
8280: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
8290: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
82a0: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
82b0: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
82c0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
82d0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
82e0: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
82f0: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
8300: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
8310: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
8320: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
8330: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
8340: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
8350: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
8360: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
8370: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
8380: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
8390: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
83a0: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
83b0: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
83c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
83d0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
83e0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
83f0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
8400: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
8410: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
8420: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
8430: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
8440: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
8450: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
8460: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
8470: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
8480: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
8490: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
84a0: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
84b0: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
84c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
84d0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
84e0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
84f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8500: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
8510: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
8520: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
8530: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
8540: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
8550: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
8560: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
8570: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
8580: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
8590: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
85a0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
85b0: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
85c0: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
85d0: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
85e0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
85f0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
8600: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
8610: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
8620: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
8630: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
8640: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
8650: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
8660: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
8670: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
8680: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
8690: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
86a0: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
86b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
86c0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
86d0: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
86e0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
86f0: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
8700: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
8710: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
8720: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
8730: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
8740: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
8750: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
8760: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
8770: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8780: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
8790: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
87a0: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
87b0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
87c0: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
87d0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
87e0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
87f0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
8800: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8810: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
8820: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
8830: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
8840: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
8850: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
8860: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
8870: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
8880: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
8890: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
88a0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
88b0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
88c0: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
88d0: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
88e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
88f0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
8900: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
8910: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
8920: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
8930: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
8940: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
8950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8960: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
8970: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
8980: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8990: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
89a0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
89b0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
89c0: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
89d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
89e0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
89f0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
8a00: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
8a10: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
8a20: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
8a30: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
8a40: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
8a50: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
8a60: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
8a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
8a80: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
8a90: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
8aa0: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
8ab0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
8ac0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
8ad0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8ae0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8af0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8b00: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
8b10: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8b20: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
8b30: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
8b40: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
8b50: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
8b60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8b70: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
8b80: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
8b90: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
8ba0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
8bb0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
8bc0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
8bd0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
8be0: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
8bf0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
8c00: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
8c10: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8c20: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
8c30: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
8c40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8c50: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
8c60: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
8c70: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
8c80: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8c90: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
8ca0: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
8cb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8cc0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
8cd0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
8ce0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
8cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8d00: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8d10: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8d20: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8d30: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8d40: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8d60: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8d70: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8d80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8d90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8da0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
8db0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8dc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
8dd0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
8de0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8df0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
8e00: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
8e10: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8e20: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
8e30: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
8e40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8e50: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
8e60: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
8e70: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8e80: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
8e90: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
8ea0: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
8eb0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
8ec0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
8ed0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8ee0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
8ef0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
8f00: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8f10: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8f20: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8f30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8f40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8f50: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
8f60: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8f70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8f80: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
8f90: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8fa0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
8fb0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
8fc0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
8fd0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20  rCode n;....    
8fe0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8ff0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9000: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
9010: 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c  2AsInt64) == SQL
9020: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9030: 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49  gs.BindUInt32AsI
9040: 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b  nt64)..        {
9050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
9060: 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75  ng value2 = valu
9070: 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  e;....#if !PLATF
9080: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9090: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
90a0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
90b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
90c0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
90d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
90e0: 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  e2);..#elif !SQL
90f0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9100: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
9110: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9120: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
9130: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
9140: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
9150: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d  value2);..#else.
9160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
9170: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
9180: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
9190: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
91a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
91b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
91c0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
91d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
91e0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
91f0: 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uint(handle, ind
9200: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
9210: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9220: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
9230: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
9240: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9250: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9260: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
9270: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9280: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
9290: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
92a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
92b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
92c0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
92d0: 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61  t index, long va
92e0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
92f0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
9300: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
9310: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
9320: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
9330: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9340: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9350: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9360: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9370: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9380: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9390: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
93a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
93b0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
93c0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
93d0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
93e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
93f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
9400: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9410: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9420: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
9430: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
9440: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
9450: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
9460: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9470: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9480: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9490: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
94a0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
94b0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
94c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
94d0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
94e0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
94f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9500: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
9510: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
9520: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
9530: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
9540: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
9550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9560: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
9570: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
9580: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9590: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
95a0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
95b0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
95c0: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
95d0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
95e0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
95f0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
9600: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
9610: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
9620: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
9630: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
9640: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
9650: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
9660: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
9670: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
9680: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
9690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
96a0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
96b0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
96c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
96d0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
96e0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
96f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9700: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
9710: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
9720: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
9730: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
9740: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
9750: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
9760: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9770: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
9780: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
9790: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
97a0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
97b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
97c0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
97d0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
97e0: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
97f0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
9800: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
9810: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9820: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
9830: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
9840: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9850: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
9860: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
9870: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
9880: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9890: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
98a0: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
98b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
98c0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
98d0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
98e0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
98f0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
9900: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
9910: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
9920: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9930: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9940: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
9950: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9960: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
9970: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9980: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
9990: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
99a0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
99b0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
99c0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
99d0: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23  TF8(value);....#
99e0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
99f0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9a00: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9a10: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9a20: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9a30: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9a40: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9a50: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
9a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
9a70: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
9a80: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
9a90: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
9aa0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9ab0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9ac0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9ad0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
9ae0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
9af0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
9b00: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
9b10: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
9b20: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9b30: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
9b40: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
9b50: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
9b60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9b70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9b80: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
9b90: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
9ba0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
9bb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9bc0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
9bd0: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
9be0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9bf0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
9c00: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
9c10: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9c20: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
9c30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9c40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
9c50: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
9c60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9c70: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
9c80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9c90: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
9ca0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9cb0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
9cc0: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
9cd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
9ce0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77  if....        sw
9cf0: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
9d00: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
9d10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
9d20: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
9d30: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d60: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
9d70: 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23  = dt.Ticks;....#
9d80: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9d90: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
9dc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9dd0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
9de0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
9df0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e30: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
9e40: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
9e80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
9e90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9ea0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
9eb0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
9ec0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9ed0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
9ee0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
9f00: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
9f10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9f20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9f30: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
9f40: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
9f50: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
9f60: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9f70: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9f80: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
9f90: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
9fa0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
9fb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
9fc0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9fd0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9fe0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9ff0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
a000: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
a010: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a030: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a040: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
a050: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
a060: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
a070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a080: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
a090: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
a0a0: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  nDay(dt);....#if
a0b0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a0c0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
a0f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a100: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
a110: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a120: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
a130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
a160: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
a170: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a1b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a1c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a1d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a1e0: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
a1f0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
a200: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
a210: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
a220: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a230: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a240: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a250: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a260: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
a270: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
a280: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
a290: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
a2a0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a2b0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
a2c0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
a2d0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
a2e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
a2f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a300: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
a310: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
a320: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
a330: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
a340: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a360: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a370: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
a380: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
a390: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
a3a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a3b0: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
a3c0: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
a3d0: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
a3e0: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
a3f0: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
a400: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
a410: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
a440: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
a450: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
a460: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
a470: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
a480: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a490: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4b0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
a4c0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
a4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a4e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
a500: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
a510: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a520: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
a530: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
a540: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
a550: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
a560: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a580: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
a590: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a5a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
a5b0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
a5c0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
a5d0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
a5e0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
a5f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a600: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
a610: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
a620: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
a630: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
a640: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
a650: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
a660: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
a670: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
a680: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
a690: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a6b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a6c0: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
a6d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6f0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
a700: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
a710: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a720: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a740: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
a750: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a760: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
a770: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a780: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
a7c0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
a7d0: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a7f0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
a810: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
a820: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a830: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
a840: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
a850: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
a860: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
a870: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a890: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
a8a0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
a8b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
a8c0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
a8d0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
a8f0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
a900: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a910: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
a920: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a930: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
a940: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a950: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
a960: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
a970: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
a980: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
a990: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a9a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
a9b0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
a9c0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a9d0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
a9e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
a9f0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
aa00: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
aa10: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
aa20: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
aa30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
aa40: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
aa50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa60: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
aa70: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
aa80: 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ta);..        }.
aa90: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
aaa0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
aab0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
aac0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
aad0: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e  e3_bind_blob(han
aae0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
aaf0: 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c  Data, blobData.L
ab00: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
ab10: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
ab20: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ab30: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ab40: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ab50: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ab60: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
ab70: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ab80: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
ab90: 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53  ind_Null(SQLiteS
aba0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
abb0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
abc0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
abd0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
abe0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
abf0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
ac00: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
ac10: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
ac20: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ac30: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ac40: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
ac50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ac60: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
ac70: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ac80: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
ac90: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
aca0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
acb0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
acc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
acd0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
ace0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
acf0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
ad00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ad10: 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65  bind_null(handle
ad20: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
ad30: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
ad40: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
ad50: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ad60: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
ad70: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
ad80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ad90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
ada0: 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e  t Bind_ParamCoun
adb0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
adc0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
add0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
ade0: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
adf0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
ae00: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
ae10: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
ae20: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
ae30: 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61  int value = Unsa
ae40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ae50: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
ae60: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e  ameter_count(han
ae70: 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dle);....       
ae80: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
ae90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
aea0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
aeb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
aec0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
aed0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aee0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
aef0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
af00: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
af10: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
af20: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
af30: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
af40: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
af50: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
af60: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
af70: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
af80: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
af90: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
afb0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
afc0: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
afd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
afe0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
aff0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b000: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
b010: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
b020: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b030: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
b040: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
b050: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
b060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
b070: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
b080: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
b090: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
b0a0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
b0b0: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
b0c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
b0d0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
b0e0: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
b0f0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
b100: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b110: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
b120: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
b130: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
b140: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
b150: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
b160: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
b170: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
b180: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b190: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
b1a0: 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20  er_name(handle, 
b1b0: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
b1c0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
b1d0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
b1e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b1f0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
b200: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b210: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
b220: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b230: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
b240: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
b250: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
b260: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
b270: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
b280: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
b290: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
b2a0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
b2b0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
b2c0: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
b2d0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
b2e0: 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d  } name is {{{2}}
b2f0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
b300: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
b310: 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29  tr, index, name)
b320: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
b330: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
b340: 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  name;..    }....
b350: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b360: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
b370: 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65  aramIndex(SQLite
b380: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b390: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b3a0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72  Flags flags, str
b3b0: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a  ing paramName)..
b3c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
b3d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
b3e0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
b3f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
b400: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
b410: 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  dex = UnsafeNati
b420: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b430: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
b440: 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54  _index(handle, T
b450: 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29  oUTF8(paramName)
b460: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
b470: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
b480: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
b490: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
b4a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b4b0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
b4c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b4d0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
b4e0: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
b4f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b500: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
b510: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
b520: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
b530: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
b540: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
b550: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b560: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
b570: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
b580: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
b590: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
b5b0: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
b5c0: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
b5d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b5e0: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65       return inde
b5f0: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
b600: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b610: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75  de int ColumnCou
b620: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
b630: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
b640: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
b650: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b660: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
b670: 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  _count(stmt._sql
b680: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
b690: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b6a0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
b6b0: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
b6c0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b6d0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b6e0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
b6f0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b700: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
b710: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
b720: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b730: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
b740: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
b750: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
b760: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b  index, out len);
b770: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 49  ..#else..      I
b780: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
b790: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b7a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
b7b0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
b7c0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
b7d0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
b7e0: 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p == IntPtr.Zero
b7f0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
b800: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b810: 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f 72  tion(SQLiteError
b820: 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c  Code.NoMem, GetL
b830: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69  astError());..#i
b840: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
b850: 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RD..      return
b860: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
b870: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
b880: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
b890: 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b  ToString(p, -1);
b8a0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
b8b0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b8c0: 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66  override TypeAff
b8d0: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
b8e0: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
b8f0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b900: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
b910: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
b920: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b930: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
b940: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
b950: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
b960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b970: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
b980: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
b990: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b9a0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
b9b0: 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74   out TypeAffinit
b9c0: 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20  y nAffinity)..  
b9d0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c    {..      int l
b9e0: 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  en;..#if !SQLITE
b9f0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ba00: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
ba10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ba20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
ba30: 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28  ecltype_interop(
ba40: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ba50: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
ba60: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
ba70: 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20    len = -1;..   
ba80: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
ba90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
baa0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
bab0: 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f  _decltype(stmt._
bac0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
bad0: 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ex);..#endif..  
bae0: 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20      nAffinity = 
baf0: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
bb00: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
bb10: 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 49        if (p != I
bb20: 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75  ntPtr.Zero) retu
bb30: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
bb40: 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
bb50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
bb60: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
bb70: 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65  ar = stmt.TypeDe
bb80: 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20  finitions;..    
bb90: 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e 75      if (ar != nu
bba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
bbb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
bbc0: 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20  dex < ar.Length 
bbd0: 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20  && ar[index] != 
bbe0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
bbf0: 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64     return ar[ind
bc00: 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex];..        }.
bc10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
bc20: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
bc30: 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74 63  .        //switc
bc40: 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  h (nAffinity).. 
bc50: 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
bc60: 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70      //  case Typ
bc70: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
bc80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bc90: 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22 3b  return "BIGINT";
bca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
bcb0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
bcc0: 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
bcd0: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 44   //    return "D
bce0: 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20  OUBLE";..       
bcf0: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
bd00: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
bd10: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
bd20: 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20  rn "BLOB";..    
bd30: 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a      //  default:
bd40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bd50: 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a  return "TEXT";..
bd60: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20          //}..   
bd70: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
bd80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bd90: 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49  ride int ColumnI
bda0: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
bdb0: 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e  ment stmt, strin
bdc0: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20  g columnName).. 
bdd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
bde0: 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  x = ColumnCount(
bdf0: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
be00: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
be10: 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20  n < x; n++)..   
be20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
be30: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
be40: 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c  (columnName, Col
be50: 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29  umnName(stmt, n)
be60: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
be70: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
be80: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
be90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
bea0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
beb0: 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20   return -1;..   
bec0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
bed0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
bee0: 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61  ng ColumnOrigina
bef0: 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  lName(SQLiteStat
bf00: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
bf10: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
bf20: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
bf30: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
bf40: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
bf50: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
bf60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bf70: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
bf80: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e  n_origin_name_in
bf90: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
bfa0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
bfb0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
bfc0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
bfd0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
bfe0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
bff0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
c000: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
c010: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c020: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
c030: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
c040: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c050: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
c060: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
c070: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
c080: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
c090: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
c0a0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
c0b0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
c0c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
c0d0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
c0e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c0f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
c100: 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74  atabase_name_int
c110: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
c120: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
c130: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
c140: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
c150: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
c160: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
c170: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
c180: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
c190: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
c1a0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
c1b0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
c1c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c1d0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
c1e0: 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65   ColumnTableName
c1f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c200: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
c210: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
c220: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c230: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
c240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
c250: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
c260: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c270: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
c280: 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  le_name_interop(
c290: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
c2a0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
c2b0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
c2c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
c2d0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
c2e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c2f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
c300: 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  able_name(stmt._
c310: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
c320: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
c330: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
c340: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c350: 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74  e void ColumnMet
c360: 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61 74  aData(string dat
c370: 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61  aBase, string ta
c380: 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  ble, string colu
c390: 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 64  mn, out string d
c3a0: 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74 72  ataType, out str
c3b0: 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ing collateSeque
c3c0: 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f  nce, out bool no
c3d0: 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20  tNull, out bool 
c3e0: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
c3f0: 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65  bool autoIncreme
c400: 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nt)..    {..    
c410: 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70    IntPtr dataTyp
c420: 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ePtr;..      Int
c430: 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b 0d  Ptr collSeqPtr;.
c440: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e  .      int nnotN
c450: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ull;..      int 
c460: 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20 20  nprimaryKey;..  
c470: 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63      int nautoInc
c480: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
c490: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20  rrorCode n;..   
c4a0: 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20     int dtLen;.. 
c4b0: 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d       int csLen;.
c4c0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
c4d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
c4e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c4f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
c500: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
c510: 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71  data_interop(_sq
c520: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
c530: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
c540: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
c550: 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65  n), out dataType
c560: 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71  Ptr, out collSeq
c570: 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c  Ptr, out nnotNul
c580: 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b  l, out nprimaryK
c590: 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63  ey, out nautoInc
c5a0: 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75 74  , out dtLen, out
c5b0: 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d   csLen);..#else.
c5c0: 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d  .      dtLen = -
c5d0: 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20  1;..      csLen 
c5e0: 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  = -1;....      n
c5f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c600: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
c610: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
c620: 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46  data(_sql, ToUTF
c630: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
c640: 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
c650: 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
c660: 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74  dataTypePtr, out
c670: 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74   collSeqPtr, out
c680: 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e   nnotNull, out n
c690: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
c6a0: 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64  nautoInc);..#end
c6b0: 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
c6c0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c6d0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
c6e0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c6f0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
c700: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61  ());....      da
c710: 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53  taType = UTF8ToS
c720: 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74  tring(dataTypePt
c730: 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20  r, dtLen);..    
c740: 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63    collateSequenc
c750: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
c760: 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c  (collSeqPtr, csL
c770: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f  en);....      no
c780: 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c  tNull = (nnotNul
c790: 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  l == 1);..      
c7a0: 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70  primaryKey = (np
c7b0: 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b  rimaryKey == 1);
c7c0: 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72  ..      autoIncr
c7d0: 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e  ement = (nautoIn
c7e0: 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  c == 1);..    }.
c7f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c800: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
c810: 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  GetDouble(SQLite
c820: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c830: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
c840: 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  {..      double 
c850: 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
c860: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
c870: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
c880: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
c890: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c8a0: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
c8b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
c8c0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69  t, index);..#eli
c8d0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
c8e0: 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
c8f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c900: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
c910: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ble_interop(stmt
c920: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
c930: 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29  ndex, out value)
c940: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c950: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
c960: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
c970: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
c980: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
c990: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c9a0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c9b0: 65 20 73 62 79 74 65 20 47 65 74 53 42 79 74 65  e sbyte GetSByte
c9c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c9d0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
c9e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c9f0: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
ca00: 28 28 73 62 79 74 65 29 28 47 65 74 49 6e 74 33  ((sbyte)(GetInt3
ca10: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26  2(stmt, index) &
ca20: 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29   byte.MaxValue))
ca30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ca40: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ca50: 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28 53  e byte GetByte(S
ca60: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
ca70: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
ca80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
ca90: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
caa0: 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73  byte)(GetInt32(s
cab0: 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79  tmt, index) & by
cac0: 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  te.MaxValue));..
cad0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cae0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
caf0: 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53 51  hort GetInt16(SQ
cb00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
cb10: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
cb20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
cb30: 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73  urn unchecked((s
cb40: 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73  hort)(GetInt32(s
cb50: 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73  tmt, index) & us
cb60: 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b  hort.MaxValue));
cb70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cb80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cb90: 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74 31   ushort GetUInt1
cba0: 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
cbb0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
cbc0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
cbd0: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
cbe0: 64 28 28 75 73 68 6f 72 74 29 28 47 65 74 49 6e  d((ushort)(GetIn
cbf0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
cc00: 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c   & ushort.MaxVal
cc10: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
cc20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cc30: 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74  rride int GetInt
cc40: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
cc50: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
cc60: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
cc70: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
cc80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cc90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
cca0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ccb0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
ccc0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ccd0: 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74 20  l override uint 
cce0: 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74 65  GetUInt32(SQLite
ccf0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
cd00: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
cd10: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
cd20: 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74 29  unchecked((uint)
cd30: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
cd40: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
cd50: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cd60: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
cd70: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
cd80: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
cd90: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
cda0: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b       long value;
cdb0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
cdc0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
cdd0: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
cde0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cdf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
ce00: 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
ce10: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
ce20: 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
ce30: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
ce40: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
ce50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ce60: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
ce70: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
ce80: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
ce90: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  t value);..#else
cea0: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
ceb0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
cec0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
ced0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
cee0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
cef0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cf00: 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20   override ulong 
cf10: 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65  GetUInt64(SQLite
cf20: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
cf30: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
cf40: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
cf50: 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67  unchecked((ulong
cf60: 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  )GetInt64(stmt, 
cf70: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
cf80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
cf90: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
cfa0: 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74  GetText(SQLiteSt
cfb0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
cfc0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
cfd0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
cfe0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
cff0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
d000: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
d010: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
d020: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
d030: 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
d040: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
d050: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
d060: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
d070: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
d080: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
d090: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d0a0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
d0b0: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
d0c0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d  e_stmt, index),.
d0d0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
d0e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d0f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
d100: 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  s(stmt._sqlite_s
d110: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23  tmt, index));..#
d120: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
d130: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d140: 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47  rride DateTime G
d150: 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74  etDateTime(SQLit
d160: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d170: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
d180: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 64   {..      if (_d
d190: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
d1a0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
d1b0: 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20 20  ts.Ticks)..     
d1c0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
d1d0: 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74  Time(GetInt64(st
d1e0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
d1f0: 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  etimeKind);..   
d200: 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
d210: 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
d220: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
d230: 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20  .JulianDay)..   
d240: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
d250: 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65  teTime(GetDouble
d260: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f  (stmt, index), _
d270: 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
d280: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
d290: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
d2a0: 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
d2b0: 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a  ats.UnixEpoch)..
d2c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
d2d0: 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74  oDateTime(GetInt
d2e0: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  32(stmt, index),
d2f0: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b   _datetimeKind);
d300: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
d310: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
d320: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
d330: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
d340: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
d350: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d360: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
d370: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
d380: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
d390: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
d3a0: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
d3b0: 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61   ToDateTime(Unsa
d3c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d3d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
d3e0: 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
d3f0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a  _stmt, index),..
d400: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
d410: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d420: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
d430: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
d440: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65  mt, index));..#e
d450: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
d460: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d470: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74  ride long GetByt
d480: 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
d490: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
d4a0: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
d4b0: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
d4c0: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
d4d0: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
d4e0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
d4f0: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
d500: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d510: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
d520: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
d530: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
d540: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
d550: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
d560: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
d570: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
d580: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
d590: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
d5a0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
d5b0: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
d5c0: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
d5d0: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
d5e0: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
d5f0: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
d600: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
d610: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
d620: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
d630: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
d640: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
d650: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
d660: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
d670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d680: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
d690: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d6a0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
d6b0: 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
d6c0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
d6d0: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
d6e0: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
d6f0: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
d700: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
d710: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
d720: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
d730: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
d740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
d750: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
d760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
d770: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
d780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d790: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
d7a0: 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69  ng GetChars(SQLi
d7b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d7c0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
d7d0: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68   nDataOffset, ch
d7e0: 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  ar[] bDest, int 
d7f0: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
d800: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
d810: 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20     int nlen;..  
d820: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
d830: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
d840: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
d850: 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
d860: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c  ndex);..      nl
d870: 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b  en = str.Length;
d880: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  ....      if (bD
d890: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
d8a0: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
d8b0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
d8c0: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
d8d0: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
d8e0: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
d8f0: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
d900: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
d910: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
d920: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
d930: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
d940: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
d950: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
d960: 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44     str.CopyTo(nD
d970: 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74  ataOffset, bDest
d980: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
d990: 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
d9a0: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a  nCopied = 0;....
d9b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
d9c0: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
d9d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d9e0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c  rride bool IsNul
d9f0: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
da00: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
da10: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
da20: 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41   return (ColumnA
da30: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
da40: 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69  dex) == TypeAffi
da50: 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20  nity.Null);..   
da60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
da70: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
da80: 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
da90: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
daa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
dab0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
dac0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dad0: 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28  aggregate_count(
dae0: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
daf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
db00: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
db10: 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74  reateFunction(st
db20: 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e  ring strFunction
db30: 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f  , int nArgs, boo
db40: 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53  l needCollSeq, S
db50: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
db60: 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  nc, SQLiteCallba
db70: 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c  ck funcstep, SQL
db80: 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b  iteFinalCallback
db90: 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20   funcfinal)..   
dba0: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
dbb0: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
dbc0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
dbd0: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
dbe0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
dbf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
dc00: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
dc10: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
dc20: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
dc30: 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
dc40: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
dc50: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
dc60: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
dc70: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
dc80: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
dc90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
dca0: 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
dcb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
dcc0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
dcd0: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
dce0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
dcf0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
dd00: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
dd10: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
dd20: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
dd30: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
dd40: 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65  ? 1 : 0);..#else
dd50: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
dd60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dd70: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
dd80: 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
dd90: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
dda0: 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
ddb0: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
ddc0: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
ddd0: 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  nal);..      if 
dde0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
ddf0: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
de00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
de10: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
de20: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
de30: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
de40: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
de50: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
de60: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
de70: 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  final);..#endif.
de80: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
de90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dea0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
deb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
dec0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
ded0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
dee0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
def0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c  e void CreateCol
df00: 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
df10: 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
df20: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
df30: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
df40: 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b  n func16)..    {
df50: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
df60: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
df70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
df80: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
df90: 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
dfa0: 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
dfb0: 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a  on), 2, IntPtr.Z
dfc0: 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20  ero, func16);.. 
dfd0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
dfe0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
dff0: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
e000: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e010: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
e020: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
e030: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31  strCollation), 1
e040: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
e050: 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  unc);..      if 
e060: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e070: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e080: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e090: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e0a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
e0b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e0c0: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
e0d0: 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
e0e0: 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
e0f0: 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
e100: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
e110: 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73  ing s1, string s
e120: 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
e130: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
e140: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
e150: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
e160: 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
e170: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
e180: 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
e190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
e1a0: 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
e1b0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
e1c0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
e1d0: 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
e1e0: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
e1f0: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
e200: 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
e210: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
e220: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
e230: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
e240: 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
e250: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
e260: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
e270: 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
e280: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
e290: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
e2a0: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
e2b0: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
e2d0: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
e2e0: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
e2f0: 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
e300: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
e310: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
e320: 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
e330: 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a  .GetBytes(s1);..
e340: 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
e350: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32  rter.GetBytes(s2
e360: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
e370: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
e380: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e390: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
e3a0: 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
e3b0: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
e3c0: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
e3d0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e3e0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e3f0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e400: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e410: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e420: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
e430: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
e440: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
e450: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
e460: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
e470: 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68  t, char[] c1, ch
e480: 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d  ar[] c2)..    {.
e490: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
e4a0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
e4b0: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
e4c0: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
e4d0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
e4e0: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
e4f0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
e500: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
e510: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e520: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
e530: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
e540: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
e550: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
e560: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
e570: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
e580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
e590: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
e5a0: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
e5b0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
e5c0: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
e5d0: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
e5e0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
e5f0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
e600: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
e610: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
e620: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
e630: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
e640: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
e650: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
e660: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
e670: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
e680: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
e690: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
e6a0: 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  c1);..      b2 =
e6b0: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
e6c0: 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(c2);....    
e6d0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
e6e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e6f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
e700: 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70  lcompare_interop
e710: 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31  (context, b1, b1
e720: 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e  .Length, b2, b2.
e730: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d  Length);..#else.
e740: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
e750: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e760: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e770: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
e780: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e790: 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  ide CollationSeq
e7a0: 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69  uence GetCollati
e7b0: 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74  onSequence(SQLit
e7c0: 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20  eFunction func, 
e7d0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
e7e0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
e7f0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e800: 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71      CollationSeq
e810: 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20  uence seq = new 
e820: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
e830: 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e();..      int 
e840: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
e850: 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e 74  type;..      int
e860: 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e 74   enc;..      Int
e870: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
e880: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e890: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
e8a0: 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  seq_interop(cont
e8b0: 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f  ext, out type, o
e8c0: 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29  ut enc, out len)
e8d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
e8e0: 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61   != null) seq.Na
e8f0: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
e900: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
e910: 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f    seq.Type = (Co
e920: 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29  llationTypeEnum)
e930: 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71  type;..      seq
e940: 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a  ._func = func;..
e950: 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69        seq.Encodi
e960: 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45  ng = (CollationE
e970: 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b  ncodingEnum)enc;
e980: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
e990: 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   seq;..#else..  
e9a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
e9b0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
e9c0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
e9d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e9e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e9f0: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
ea00: 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20  lueBytes(IntPtr 
ea10: 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  p, int nDataOffs
ea20: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
ea30: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
ea40: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
ea50: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
ea60: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
ea70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ea80: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d  value_bytes(p);.
ea90: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e  ...      // If n
eaa0: 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75  o destination bu
eab0: 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65  ffer, return the
eac0: 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20   size needed... 
ead0: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
eae0: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
eaf0: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  len;....      in
eb00: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
eb10: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  gth;....      if
eb20: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
eb30: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
eb40: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
eb50: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
eb60: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
eb70: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
eb80: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
eb90: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
eba0: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
ebb0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
ebc0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  > 0)..      {.. 
ebd0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74         IntPtr pt
ebe0: 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  r = UnsafeNative
ebf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ec00: 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a  value_blob(p);..
ec10: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
ec20: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
ec30: 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
ec40: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
ec50: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
ec60: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
ec70: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
ec80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
ec90: 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
eca0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
ecb0: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
ecc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ecd0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75  nal override dou
ece0: 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ble GetParamValu
ecf0: 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70  eDouble(IntPtr p
ed00: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
ed10: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
ed20: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
ed30: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
ed40: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
ed50: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ed60: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
ed70: 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23  _double(ptr);..#
ed80: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
ed90: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
eda0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
edb0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
edc0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74  ouble_interop(pt
edd0: 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  r, out value);..
ede0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
edf0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
ee00: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
ee10: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
ee20: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
ee30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ee40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
ee50: 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  nt GetParamValue
ee60: 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72  Int32(IntPtr ptr
ee70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ee80: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
ee90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
eea0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72  e3_value_int(ptr
eeb0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
eec0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
eed0: 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
eee0: 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74  ValueInt64(IntPt
eef0: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
ef00: 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65       Int64 value
ef10: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
ef20: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
ef30: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
ef40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ef50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
ef60: 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a  ue_int64(ptr);..
ef70: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
ef80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
ef90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
efa0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
efb0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74  int64_interop(pt
efc0: 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  r, out value);..
efd0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
efe0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
eff0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
f000: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
f010: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
f020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f030: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
f040: 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61  tring GetParamVa
f050: 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70  lueText(IntPtr p
f060: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  tr)..    {..#if 
f070: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
f080: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
f090: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
f0a0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
f0b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f0c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
f0d0: 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  xt_interop(ptr, 
f0e0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
f0f0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
f100: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
f110: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
f120: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
f130: 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a  lue_text(ptr),..
f140: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
f150: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f160: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
f170: 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ptr));..#endif..
f180: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f190: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
f1a0: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
f1b0: 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
f1c0: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
f1d0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
f1e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f1f0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
f200: 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20  _type(ptr);..   
f210: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f220: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
f230: 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
f240: 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
f250: 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
f260: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
f270: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f280: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
f290: 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  context, value, 
f2a0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
f2b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
f2c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f2d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f2e0: 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49  d ReturnDouble(I
f2f0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64  ntPtr context, d
f300: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
f310: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
f320: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
f330: 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
f340: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f350: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
f360: 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61  uble(context, va
f370: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
f380: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
f390: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
f3a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f3b0: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
f3c0: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
f3d0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
f3e0: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
f3f0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
f400: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
f410: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
f420: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f430: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
f440: 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63  rnError(IntPtr c
f450: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
f460: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
f470: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
f480: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f490: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
f4a0: 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
f4b0: 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ue), value.Lengt
f4c0: 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
f4d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f4e0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
f4f0: 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
f500: 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  ext, int value).
f510: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
f520: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f530: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
f540: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61  _int(context, va
f550: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
f560: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f570: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
f580: 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f  nInt64(IntPtr co
f590: 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75  ntext, long valu
f5a0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
f5b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
f5c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
f5d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f5e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
f5f0: 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
f600: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
f610: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
f620: 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
f630: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f640: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
f650: 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  64_interop(conte
f660: 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
f670: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
f680: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
f690: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
f6a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f6b0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f6c0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f6d0: 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74  ReturnNull(IntPt
f6e0: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
f6f0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
f700: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f710: 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c  ite3_result_null
f720: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
f730: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f740: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f750: 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74  ReturnText(IntPt
f760: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
f770: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
f780: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
f790: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
f7a0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
f7b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f7c0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
f7d0: 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
f7e0: 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68  value), b.Length
f7f0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
f800: 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  1));..    }....#
f810: 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
f820: 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
f830: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f840: 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
f850: 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
f860: 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
f870: 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 64  er to create a d
f880: 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f  isposable..    /
f890: 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69  // module contai
f8a0: 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
f8b0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
f8c0: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
f8d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f8e0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f8f0: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
f900: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
f910: 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20  le object to be 
f920: 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69  used when creati
f930: 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64 69  ng the native di
f940: 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e  sposable module.
f950: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
f960: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
f970: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
f980: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
f990: 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
f9a0: 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66  ciated <see cref
f9b0: 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
f9c0: 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
f9d0: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
f9e0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
f9f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fa00: 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75   void CreateModu
fa10: 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
fa20: 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f  module, SQLiteCo
fa30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
fa40: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
fa50: 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
fa60: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
fa70: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
fa80: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
fa90: 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b  ption("module");
faa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
fab0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
fac0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
fad0: 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53  oLogModule) != S
fae0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
faf0: 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65  lags.NoLogModule
fb00: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
fb10: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
fb20: 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28 66  .LogErrors = ((f
fb30: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
fb40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
fb50: 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20  ModuleError) == 
fb60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fb70: 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
fb80: 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
fb90: 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78      module.LogEx
fba0: 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61  ceptions = ((fla
fbb0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
fbc0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
fbd0: 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20 3d  duleException) =
fbe0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
fbf0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
fc00: 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20  eException);..  
fc10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
fc20: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
fc30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
fc40: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
fc50: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e  teException("con
fc60: 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
fc70: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b  nvalid handle");
fc80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 65 74 4c  ....        SetL
fc90: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75  oadExtension(tru
fca0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f 61  e);..        Loa
fcb0: 64 45 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61 66  dExtension(Unsaf
fcc0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
fcd0: 51 4c 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c 69  QLITE_DLL, "sqli
fce0: 74 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22  te3_vtshim_init"
fcf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
fd00: 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65 44   (module.CreateD
fd10: 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28  isposableModule(
fd20: 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  _sql))..        
fd30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
fd40: 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e  f (_modules == n
fd50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
fd60: 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d        _modules =
fd70: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
fd80: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
fd90: 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  dule>();....    
fda0: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
fdb0: 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65  .Add(module.Name
fdc0: 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20  , module);....  
fdd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 75            if (_u
fde0: 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20  sePool)..       
fdf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fe00: 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c          _usePool
fe10: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
fe20: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
fe30: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
fe40: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
fe50: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
fe60: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
fe70: 6d 61 74 28 22 43 72 65 61 74 65 4d 6f 64 75 6c  mat("CreateModul
fe80: 65 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65  e (Pool) Disable
fe90: 64 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  d: {0}", _sql));
fea0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
feb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fec0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
fed0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fee0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
fef0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ff00: 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  on(GetLastError(
ff10: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
ff20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
ff30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ff40: 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
ff50: 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
ff60: 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
ff70: 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65  r to cleanup the
ff80: 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20   resources..    
ff90: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
ffa0: 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e  ith a module con
ffb0: 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
ffc0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
ffd0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
ffe0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
fff0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
10000 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
10010 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
10020 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65  odule object pre
10030 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74  viously passed t
10040 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
10050 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f  "CreateModule" /
10060 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f  >..    /// metho
10070 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
10080 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
10090 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
100a0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
100b0 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73  flags for the as
100c0 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72  sociated <see cr
100d0 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
100e0 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tion" /> object 
100f0 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
10100 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
10110 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10120 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d  de void DisposeM
10130 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
10140 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
10150 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
10160 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
10170 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
10180 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
10190 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
101a0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
101b0 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
101c0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d  ");....        m
101d0 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
101e0 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
101f0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10200 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20  override IntPtr 
10210 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74  AggregateContext
10220 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
10230 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10240 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10250 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10260 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
10270 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b  ext(context, 1);
10280 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
10290 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
102a0 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
102b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
102c0 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
102d0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
102e0 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
102f0 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74  o declare a virt
10300 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
10310 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  // in response t
10320 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
10330 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
10340 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
10350 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
10360 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
10370 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
10380 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
10390 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
103a0 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
103b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
103c0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
103d0 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
103e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
103f0 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
10400 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
10410 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
10420 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
10430 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20  ..    /// being 
10440 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
10450 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
10460 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10470 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20  ="strSql">..    
10480 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63  /// The string c
10490 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
104a0 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63  L statement desc
104b0 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75  ribing the virtu
104c0 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20  al table to..   
104d0 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64   /// be declared
104e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
104f0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
10500 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
10510 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
10520 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
10530 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
10540 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
10550 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
10560 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
10570 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
10580 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
10590 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
105a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
105b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
105c0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
105d0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
105e0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
105f0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
10600 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10610 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
10620 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
10630 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20  rtualTable(..   
10640 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
10650 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
10660 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c     string strSql
10670 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
10680 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
10690 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
106a0 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
106b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
106c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
106d0 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
106e0 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
106f0 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
10700 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10710 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10720 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
10730 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
10740 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50  tPtr pSql = IntP
10750 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
10760 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
10770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10780 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72  pSql = SQLiteStr
10790 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
107a0 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29  omString(strSql)
107b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
107c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
107d0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
107e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
107f0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a  _declare_vtab(..
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a  _sql, pSql);....
10820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10830 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
10840 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f  rCode.Ok) && (mo
10850 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  dule != null))..
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10870 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20  module.Declared 
10880 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
10890 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
108a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
108b0 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
108c0 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
108d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
108e0 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
108f0 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
10900 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10910 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71           if (pSq
10920 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  l != IntPtr.Zero
10930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10950 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
10960 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20  ree(pSql);..    
10970 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
10980 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
10990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
109a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
109b0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
109c0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
109d0 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
109e0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
109f0 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
10a00 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61  declare a virtua
10a10 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
10a20 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73   function in res
10a30 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
10a40 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  into the <see cr
10a50 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
10a60 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
10a70 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20   />..    /// or 
10a80 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
10a90 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
10aa0 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74  Connect" /> virt
10ab0 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64  ual table method
10ac0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
10ad0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10ae0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
10af0 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
10b00 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
10b10 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20   module that is 
10b20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c  to be responsibl
10b30 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
10b40 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
10b50 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
10b60 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
10b70 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
10b80 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10b90 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22  ="argumentCount"
10ba0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
10bb0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
10bc0 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  ts to the functi
10bd0 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
10be0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
10bf0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
10c00 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
10c10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
10c20 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
10c30 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
10c40 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
10c50 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10c60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
10c70 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f  r">..    /// Upo
10c80 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63  n success, the c
10c90 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20  ontents of this 
10ca0 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e  parameter are un
10cb0 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66  defined.  Upon f
10cc0 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f  ailure,..    ///
10cd0 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61   it should conta
10ce0 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  in an appropriat
10cf0 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
10d00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
10d10 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
10d20 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
10d30 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
10d40 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
10d50 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
10d60 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
10d70 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
10d80 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65  rrorCode Declare
10d90 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28  VirtualFunction(
10da0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
10db0 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
10dc0 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
10dd0 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
10de0 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
10df0 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
10e00 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
10e10 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
10e20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
10e30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10e50 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74  error = "connect
10e60 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
10e70 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20  id handle";..   
10e80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10e90 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10ea0 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
10eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  }....        Int
10ec0 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50  Ptr pName = IntP
10ed0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
10ee0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
10ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10f00 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  pName = SQLiteSt
10f10 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
10f20 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b  romString(name);
10f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10f40 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10f50 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
10f60 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10f70 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
10f80 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10f90 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c      _sql, pName,
10fa0 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b   argumentCount);
10fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10fc0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
10fd0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
10fe0 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
10ff0 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
11000 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
11010 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11020 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
11030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11040 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49    if (pName != I
11050 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
11060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11070 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11080 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e  teMemory.Free(pN
11090 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
110a0 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49         pName = I
110b0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
110c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
110d0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
110e0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
110f0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
11100 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
11110 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e  sabled extension
11120 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69   loading by SQLi
11130 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  te...    /// </s
11140 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11150 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f   <param name="bO
11160 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  nOff">..    /// 
11170 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c  True to enable l
11180 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73  oading of extens
11190 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64  ions, false to d
111a0 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  isable...    ///
111b0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
111c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
111d0 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74   void SetLoadExt
111e0 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f  ension(bool bOnO
111f0 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
11200 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
11210 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
11220 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11230 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
11240 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
11250 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62          _sql, (b
11260 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29  OnOff ? -1 : 0))
11270 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11280 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
11290 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
112a0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
112b0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
112c0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
112d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
112e0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61  ry>..    /// Loa
112f0 64 73 20 61 20 53 51 4c 69 74 65 20 65 78 74 65  ds a SQLite exte
11300 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72  nsion library fr
11310 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c  om the named fil
11320 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
11330 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11340 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c  <param name="fil
11350 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  eName">..    ///
11360 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
11370 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69   dynamic link li
11380 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61  brary file conta
11390 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73  ining the extens
113a0 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
113b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
113c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f  <param name="pro
113d0 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  cName">..    ///
113e0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
113f0 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69   exported functi
11400 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69  on used to initi
11410 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73  alize the extens
11420 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  ion...    /// If
11430 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75   null, the defau
11440 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65  lt "sqlite3_exte
11450 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c  nsion_init" will
11460 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f   be used...    /
11470 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
11480 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11490 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65  de void LoadExte
114a0 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c  nsion(string fil
114b0 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72  eName, string pr
114c0 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  ocName)..    {..
114d0 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65          if (file
114e0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
114f0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
11500 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
11510 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65  lException("file
11520 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
11530 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72     IntPtr pError
11540 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
11550 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
11560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11570 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74         byte[] ut
11580 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46  f8FileName = UTF
11590 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
115a0 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65  etBytes(fileName
115b0 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20   + '\0');..     
115c0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74         byte[] ut
115d0 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c  f8ProcName = nul
115e0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
115f0 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21    if (procName !
11600 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11610 20 20 20 20 20 20 20 20 20 75 74 66 38 50 72 6f           utf8Pro
11620 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  cName = UTF8Enco
11630 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
11640 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c  es(procName + '\
11650 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  0');....        
11660 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
11670 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
11680 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11690 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
116a0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
116b0 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46       _sql, utf8F
116c0 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f  ileName, utf8Pro
116d0 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f  cName, ref pErro
116e0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
116f0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
11700 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
11710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11720 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
11730 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54  eException(n, UT
11740 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f  F8ToString(pErro
11750 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r, -1));..      
11760 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
11770 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
11780 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11790 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74  (pError != IntPt
117a0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
117b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
117c0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
117d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
117e0 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29  te3_free(pError)
117f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11800 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50     pError = IntP
11810 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
11820 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11830 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
11840 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20   /// Enables or 
11850 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65  disabled extende
11860 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72  d result codes r
11870 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74  eturned by SQLit
11880 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
11890 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
118a0 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43  tExtendedResultC
118b0 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  odes(bool bOnOff
118c0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
118d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
118e0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
118f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11900 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
11910 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20  codes(..        
11920 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20    _sql, (bOnOff 
11930 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20  ? -1 : 0));.... 
11940 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
11950 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11960 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
11970 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
11980 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
11990 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
119a0 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51  Gets the last SQ
119b0 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d  Lite error code.
119c0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
119d0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
119e0 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64  orCode ResultCod
119f0 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
11a00 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
11a10 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11a20 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71  ite3_errcode(_sq
11a30 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  l);..    }..    
11a40 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
11a50 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65  t SQLite extende
11a60 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  d error code..  
11a70 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11a80 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
11a90 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75  ode ExtendedResu
11aa0 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
11ab0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
11ac0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11ad0 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
11ae0 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  ed_errcode(_sql)
11af0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11b00 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65  /// Add a log me
11b10 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51  ssage via the SQ
11b20 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67  Lite sqlite3_log
11b30 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20   interface...   
11b40 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11b50 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61  de void LogMessa
11b60 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
11b70 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72  de iErrCode, str
11b80 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20  ing zMessage).. 
11b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
11ba0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11bb0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72  sqlite3_log(iErr
11bc0 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65  Code, ToUTF8(zMe
11bd0 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  ssage));..    }.
11be0 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43  ...#if INTEROP_C
11bf0 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ODEC..    intern
11c00 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
11c10 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74   SetPassword(byt
11c20 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65  e[] passwordByte
11c30 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
11c40 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11c50 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
11c60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11c70 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77  _key(_sql, passw
11c80 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f  ordBytes, passwo
11c90 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
11ca0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
11cb0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11cc0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
11cd0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
11ce0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
11cf0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11d00 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11d10 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
11d20 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
11d30 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
11d40 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
11d50 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
11d60 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
11d70 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
11d80 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73  key(_sql, newPas
11d90 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77  swordBytes, (new
11da0 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d  PasswordBytes ==
11db0 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77   null) ? 0 : new
11dc0 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  PasswordBytes.Le
11dd0 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
11de0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
11df0 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
11e00 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
11e10 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
11e20 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
11e30 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
11e40 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11e50 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69   void SetAuthori
11e60 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75  zerHook(SQLiteAu
11e70 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b  thorizerCallback
11e80 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
11e90 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
11ea0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11eb0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
11ec0 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
11ed0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
11ee0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11ef0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
11f00 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
11f10 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
11f20 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
11f30 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
11f40 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11f50 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
11f60 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
11f70 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
11f80 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11f90 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
11fa0 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
11fb0 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
11fc0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
11fd0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
11fe0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11ff0 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
12000 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
12010 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
12020 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12030 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
12040 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
12050 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
12060 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
12070 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
12080 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12090 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
120a0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
120b0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
120c0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
120d0 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
120e0 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
120f0 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
12100 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12110 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12120 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  ods.sqlite3_roll
12130 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  back_hook(_sql, 
12140 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
12150 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
12160 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12170 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20  .    /// Allows 
12180 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61  the setting of a
12190 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
121a0 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c  k invoked by SQL
121b0 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20  ite when a..    
121c0 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63  /// log event oc
121d0 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20  curs.  Only one 
121e0 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20  callback may be 
121f0 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73  set.  If NULL is
12200 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   passed,..    //
12210 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61  / the logging ca
12220 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69  llback is unregi
12230 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  stered...    ///
12240 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
12250 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12260 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c  ="func">The call
12270 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
12280 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e   invoke.</param>
12290 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
122a0 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73  ns>Returns a res
122b0 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
122c0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
122d0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
122e0 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
122f0 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
12300 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
12310 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
12320 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12330 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
12340 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12350 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20  3_config_log(.. 
12360 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
12370 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
12380 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
12390 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
123a0 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
123b0 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
123c0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
123d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12420 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
12430 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12440 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
12450 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
12460 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
12470 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
12480 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
12490 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
124a0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
124b0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
124c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
124d0 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
124e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
124f0 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
12500 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
12510 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
12520 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
12530 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
12540 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
12550 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12560 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12570 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
12580 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
12590 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
125a0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
125b0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
125c0 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
125d0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
125e0 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
125f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12600 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
12610 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
12620 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
12630 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
12640 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
12650 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
12660 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
12670 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
12680 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
12690 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
126a0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
126b0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
126c0 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
126d0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
126e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
126f0 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
12700 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
12710 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
12720 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
12730 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
12740 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
12750 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
12760 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
12770 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
12780 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12790 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
127a0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
127b0 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
127c0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
127d0 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
127e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
127f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
12800 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
12810 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
12820 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
12830 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
12840 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
12850 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
12860 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
12870 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
12880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
12890 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
128a0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
128b0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
128c0 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
128d0 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
128e0 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
128f0 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
12900 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
12910 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
12920 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
12930 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
12940 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
12950 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
12960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12970 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
12980 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
12990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
129a0 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
129b0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
129c0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
129d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
129e0 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
129f0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
12a00 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
12a10 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
12a20 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
12a30 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
12a40 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
12a50 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12a60 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
12a70 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12a90 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
12aa0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
12ab0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
12ac0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
12ad0 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
12ae0 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
12af0 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
12b00 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
12b10 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
12b20 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
12b30 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
12b40 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
12b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
12b60 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12b70 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
12b80 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
12b90 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
12ba0 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
12bb0 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
12bc0 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
12bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12be0 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
12bf0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12c00 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
12c10 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
12c20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
12c30 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
12c40 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
12c50 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
12c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12c70 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
12c80 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
12c90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12ca0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
12cb0 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43  rrorCode resultC
12cc0 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65  ode = ResultCode
12cd0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12ce0 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
12cf0 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45  tCode != SQLiteE
12d00 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
12d30 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75  teException(resu
12d40 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45  ltCode, GetLastE
12d50 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
12d60 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
12d90 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66  LiteException("f
12da0 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c  ailed to initial
12db0 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20  ize backup");.. 
12dc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b              back
12de0 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  upHandle = new S
12df0 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
12e00 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61  e(destHandle, ba
12e10 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckup);..        
12e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
12e30 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
12e40 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
12e50 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
12e60 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
12e70 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
12e80 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
12e90 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
12ea0 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20   null, null,..  
12eb0 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
12ec0 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64  null, backupHand
12ed0 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62  le, null, new ob
12ee0 6a 65 63 74 5b 5d 20 7b 20 64 65 73 74 43 6e 6e  ject[] { destCnn
12ef0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
12f00 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e  estName, sourceN
12f10 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame }));....    
12f20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
12f30 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
12f40 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
12f50 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
12f60 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
12f70 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
12f80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12f90 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
12fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
12fb0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
12fc0 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
12fd0 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
12fe0 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
12ff0 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
13000 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
13010 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
13020 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
13030 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
13040 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
13050 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
13060 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
13070 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
13080 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
13090 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
130a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
130b0 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
130c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
130d0 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
130e0 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
130f0 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
13100 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
13110 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
13120 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
13130 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
13140 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
13150 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
13160 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
13170 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
13180 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
13190 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
131a0 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
131b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
131c0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
131d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
131e0 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
131f0 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
13200 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
13210 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
13220 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
13230 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13240 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
13250 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
13260 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
13270 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
13280 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75  age,..        ou
13290 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  t bool retry..  
132a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
132b0 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
132c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
132d0 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
132e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
132f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
13300 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
13310 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
13320 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
13330 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
13340 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
13350 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
13360 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
13370 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
13380 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
13390 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
133a0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
133c0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
133d0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
133e0 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
133f0 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
13400 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
13410 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
13420 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
13430 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
13440 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
13450 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
13460 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
13470 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
13480 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
13490 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
134a0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
134b0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
134c0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
134d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
134e0 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
134f0 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
13500 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
13510 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
13520 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
13530 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
13540 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
13550 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
13560 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13570 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
13580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
13590 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
135a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
135b0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
135c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
135d0 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
135e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
135f0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
13600 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
13610 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
13620 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13630 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
13640 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
13650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13660 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
13670 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13680 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
13690 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
136a0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
136b0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
136c0 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
136d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
136e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
136f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13700 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
13710 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
13720 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
13730 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
13740 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
13750 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
13760 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
13770 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
13780 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
13790 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
137a0 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
137b0 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
137c0 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
137d0 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
137e0 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
137f0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
13800 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
13810 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
13820 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
13830 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
13840 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
13850 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
13860 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
13870 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
13880 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
13890 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
138a0 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
138b0 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
138c0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
138d0 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
138e0 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
138f0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
13900 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
13910 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
13920 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
13930 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13940 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
13950 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
13960 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
13970 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
13980 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
13990 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
139a0 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
139b0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
139c0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
139d0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
139e0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
139f0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
13a20 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
13a30 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
13a40 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
13a50 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
13a60 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
13a70 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
13a80 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
13a90 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
13aa0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
13ab0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
13ac0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
13ad0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
13ae0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
13af0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
13b00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
13b10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13b20 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
13b30 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
13b40 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
13b50 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
13b60 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
13b70 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
13b80 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
13b90 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
13ba0 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
13bb0 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
13bc0 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
13bd0 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
13be0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
13bf0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13c00 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
13c10 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
13c20 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
13c30 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
13c40 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
13c50 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
13c60 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
13c70 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
13c80 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13c90 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
13ca0 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
13cb0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
13cc0 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
13cd0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
13ce0 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
13cf0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13d00 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
13d10 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
13d20 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
13d30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
13d40 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
13d50 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
13d60 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
13d70 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
13d80 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
13d90 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
13da0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
13db0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13dd0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
13de0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
13df0 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
13e00 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
13e10 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
13e20 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
13e30 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
13e40 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
13e50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
13e60 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
13e70 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
13e80 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
13e90 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
13ea0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
13eb0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
13ec0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
13ed0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13ee0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
13ef0 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
13f00 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
13f10 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
13f20 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
13f30 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
13f40 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
13f50 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
13f60 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
13f70 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
13f80 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
13f90 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
13fa0 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
13fb0 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
13fc0 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
13fd0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
13fe0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13ff0 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
14000 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
14010 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
14020 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
14030 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
14040 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
14050 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
14060 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
14070 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
14080 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
14090 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
140a0 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
140b0 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
140c0 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
140d0 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
140e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
140f0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
14100 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
14110 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
14120 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
14130 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
14140 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
14150 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
14160 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
14170 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
14180 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
14190 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
141a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
141b0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
141c0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
141d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141e0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
141f0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
14200 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
14210 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
14220 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
14230 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
14240 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
14250 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14260 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
14270 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
14280 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
14290 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
142a0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
142b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
142c0 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
142d0 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
142e0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
142f0 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
14300 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
14310 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
14320 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
14330 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
14340 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
14350 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
14360 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
14370 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
14380 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
14390 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
143a0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
143b0 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
143c0 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
143d0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
143e0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
143f0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
14400 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
14410 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
14420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14470 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
14480 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
14490 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
144a0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
144b0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
144c0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
144d0 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
144e0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
144f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14500 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
14510 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
14520 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
14530 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
14540 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
14550 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
14560 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
14570 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
14580 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
14590 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
145a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
145b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
145c0 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
145d0 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
145e0 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
145f0 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
14600 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
14610 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14620 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
14630 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
14640 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
14650 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
14660 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
14670 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
14680 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
14690 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
146a0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
146b0 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
146c0 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
146d0 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
146e0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
146f0 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
14700 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
14710 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
14720 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
14730 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
14740 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
14750 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
14760 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
14770 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
14780 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
14790 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
147a0 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
147b0 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
147c0 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
147d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
147e0 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
147f0 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
14800 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
14810 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
14820 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
14830 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
14840 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14850 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
14860 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
14870 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
14880 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
14890 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
148a0 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
148b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
148c0 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
148d0 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
148e0 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
148f0 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
14900 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
14910 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
14920 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
14930 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
14940 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
14950 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
14960 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
14970 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
14980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14990 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
149a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
149b0 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
149c0 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
149d0 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
149e0 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
149f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14a00 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
14a10 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
14a20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
14a30 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14a50 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
14a60 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
14a70 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
14a80 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
14a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14aa0 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
14ab0 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
14ac0 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
14ad0 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b00 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
14b10 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
14b20 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14b30 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
14b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b50 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
14b60 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
14b70 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
14b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b90 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
14ba0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
14bb0 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
14bc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14bd0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
14be0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
14c00 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
14c10 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
14c20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14c30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
14c40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
14c50 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c  ry>..    /// Hel
14c60 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
14c70 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d  retrieve a colum
14c80 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61  n of data from a
14c90 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  n active stateme
14ca0 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
14cb0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
14cc0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
14cd0 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
14ce0 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64  t being step()'d
14cf0 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e   through</param>
14d00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
14d10 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
14d20 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
14d30 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e  ed with the conn
14d40 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
14d50 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14d60 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
14d70 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
14d80 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
14d90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14da0 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
14db0 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
14dc0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
14dd0 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
14de0 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
14df0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
14e00 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
14e10 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
14e20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
14e30 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
14e40 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
14e50 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
14e60 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
14e70 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
14e80 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
14e90 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
14ea0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14eb0 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
14ec0 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
14ed0 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
14ee0 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c        if (IsNull
14ef0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72  (stmt, index)) r
14f00 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
14f10 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41  ue;..      TypeA
14f20 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79  ffinity aff = ty
14f30 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  p.Affinity;..   
14f40 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
14f50 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
14f60 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
14f70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
14f80 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
14f90 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
14fa0 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
14fb0 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
14fc0 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
14fd0 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
14fe0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  ...      if ((fl
14ff0 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
15000 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
15010 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c  llAsText) == SQL
15020 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
15030 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
15040 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
15050 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
15060 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
15070 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a    switch (aff)..
15080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15090 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
150a0 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
150b0 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
150c0 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
150d0 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20  && typ.Affinity 
150e0 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
150f0 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
15100 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
15110 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c  id(GetText(stmt,
15120 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20   index));....   
15130 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28         int n = (
15140 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d  int)GetBytes(stm
15150 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c  t, index, 0, nul
15160 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20  l, 0, 0);..     
15170 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
15180 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20  new byte[n];..  
15190 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73          GetBytes
151a0 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
151b0 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20   b, 0, n);....  
151c0 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
151d0 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
151e0 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d  uid && n == 16).
151f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
15200 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b  urn new Guid(b);
15210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
15220 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20  turn b;..       
15230 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
15240 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20  ty.DateTime:..  
15250 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
15260 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c  etDateTime(stmt,
15270 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
15280 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
15290 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
152a0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
152b0 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
152c0 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
152d0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
152e0 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
152f0 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75  hangeType(GetDou
15300 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
15310 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
15320 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
15330 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
15340 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
15350 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
15360 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
15370 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
15380 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
15390 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e 20  (SByte)) return 
153a0 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69  GetSByte(stmt, i
153b0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
153c0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
153d0 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e 20  f(Byte)) return 
153e0 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e  GetByte(stmt, in
153f0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
15400 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
15410 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  (Int16)) return 
15420 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69  GetInt16(stmt, i
15430 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
15440 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
15450 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75 72  f(UInt16)) retur
15460 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74  n GetUInt16(stmt
15470 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
15480 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
15490 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74  peof(Int32)) ret
154a0 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d  urn GetInt32(stm
154b0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
154c0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
154d0 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72  ypeof(UInt32)) r
154e0 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28  eturn GetUInt32(
154f0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
15500 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
15510 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29  = typeof(UInt64)
15520 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74  ) return GetUInt
15530 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
15540 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
15550 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
15560 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73  eType(GetInt64(s
15570 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
15580 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
15590 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
155a0 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
155b0 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
155c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
155d0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
155e0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
155f0 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28  tCursorForTable(
15600 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
15610 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e  stmt, int db, in
15620 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20  t rootPage)..   
15630 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
15640 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
15650 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
15660 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15670 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f  e3_table_cursor_
15680 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
15690 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72  lite_stmt, db, r
156a0 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65  ootPage);..#else
156b0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
156c0 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  1;..#endif..    
156d0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
156e0 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
156f0 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f  GetRowIdForCurso
15700 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  r(SQLiteStatemen
15710 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  t stmt, int curs
15720 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  or)..    {..#if 
15730 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
15740 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77  ..      long row
15750 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  id;..      SQLit
15760 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
15770 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15780 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73  ods.sqlite3_curs
15790 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  or_rowid_interop
157a0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
157b0 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20  mt, cursor, out 
157c0 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
157d0 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
157e0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74  rrorCode.Ok) ret
157f0 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20  urn rowid;....  
15800 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
15810 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
15820 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
15830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
15840 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15850 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d  id GetIndexColum
15860 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74  nExtendedInfo(st
15870 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73  ring database, s
15880 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72  tring index, str
15890 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
158a0 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75  int sortMode, ou
158b0 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f  t int onError, o
158c0 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ut string collat
158d0 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20  ionSequence)..  
158e0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
158f0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
15900 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20   IntPtr coll;.. 
15910 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e       int colllen
15920 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
15930 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a  rrorCode rc;....
15940 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
15950 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
15960 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c  qlite3_index_col
15970 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70  umn_info_interop
15980 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
15990 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28  tabase), ToUTF8(
159a0 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63  index), ToUTF8(c
159b0 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74  olumn), out sort
159c0 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f  Mode, out onErro
159d0 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74  r, out coll, out
159e0 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20   colllen);..    
159f0 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
15a00 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
15a10 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
15a20 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75  Exception(rc, nu
15a30 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f  ll);....      co
15a40 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
15a50 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
15a60 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a  oll, colllen);..
15a70 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72  #else..      sor
15a80 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20  tMode = 0;..    
15a90 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a    onError = 2;..
15aa0 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53        collationS
15ab0 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52  equence = "BINAR
15ac0 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  Y";..#endif..   
15ad0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
15ae0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
15af0 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65  teErrorCode File
15b00 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a  Control(string z
15b10 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20  DbName, int op, 
15b20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20  IntPtr pArg)..  
15b30 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
15b40 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
15b50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69  thods.sqlite3_fi
15b60 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c  le_control(_sql,
15b70 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c   (zDbName != nul
15b80 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e  l) ? ToUTF8(zDbN
15b90 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c  ame) : null, op,
15ba0 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a   pArg);..    }..
15bb0 20 20 7d 0d 0a 7d 0d 0a                            }..}..